JexlEngine конструктор не работает?(не может применяться к данным типам) - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь инициализировать объект JexlEngine, но конструктор не позволяет мне сделать это (хотя в документации указано, что это должно быть).

Вот документация для класса JexlEngine (в jexl3): https://people.apache.org/~henrib/jexl-3.0/apidocs/org/apache/commons/jexl3/JexlEngine.html

Первоначально код работал с импортом jexl2, но я недавно преобразовал проект в Maven, и вместо этого мне пришлось заменить его на jexl3. Теперь конструктор больше не работает.

Я что-то упустил?

Я запускаю этот проект в Netbeans, на Java 1.8 - это проект Maven с включенными зависимостями для jexl3 (используется для работы с jexl2, однако)

Мой код:

public static final JexlEngine jexl = new JexlEngine(null, new MyArithmetic(), null, null){};

static {
        jexl.setCache(512);
        jexl.setLenient(false); // null shouldnt be treated as 0
        jexl.setSilent(false);  // Instead of logging throw an exception
        jexl.setStrict(true);
}

Исходя из документации, должен быть конструктор с 4 параметрами, поскольку я пытаюсь его запустить, но по какой-то странной причине он не позволяет мне его запустить. Есть идеи почему? (опять же - раньше он работал с Jexl2)

Журнал ошибок:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project bilbon-core: Compilation failure: Compilation failure:
si/smth/project/bean/CUtil.java:[333,43] constructor JexlEngine in class org.apache.commons.jexl3.JexlEngine cannot be applied to given types;
required: no arguments
found: <nulltype>,si.smth.project.bean.CUtil.MyArithmetic,<nulltype>,<nulltype>
reason: actual and formal argument lists differ in length
si/smth/project/bean/CUtil.java:[333,99] <anonymous si.smth.project.bean.CUtil$1> is not abstract and does not override abstract method newInstance(java.lang.String,java.lang.Object...) in org.apache.commons.jexl3.JexlEngine
si/smth/project/bean/CUtil.java:[336,13] cannot find symbol
symbol:   method setCache(int)
location: variable jexl of type org.apache.commons.jexl3.JexlEngine
si/smth/project/bean/CUtil.java:[337,13] cannot find symbol

1 Ответ

0 голосов
/ 12 июня 2019

Используйте пустой конструктор, который является единственным конструктором в последних документах Java

JexlEngine jexl = new JexlEngine();

Или используйте JexlBuilder , как описано в jexl:

JexlEngine jexl = new JexlBuilder().create();

Вы можете вызывать методы компоновщика для своих сеттеров:

JexlEngine jexl = strict(true).silent(false).cache(512) .create();

Вместо флажка Lenient у вас есть комбинации setSilent и setStrict:

Методы setSilent и setStrict позволяют точно настроить поведение экземпляра движка в соответствии с различными потребностями контроля ошибок. Флаг строгого режима сообщает механизму, когда и если нулевое значение в качестве операнда считается ошибкой, флаг молчания сообщает механизму, что делать с ошибкой (зарегистрировать как предупреждение или исключение выброса).

  • Когда "тихо" и "не строго": 0 & null должны быть индикаторами значений «по умолчанию», чтобы даже в случае ошибки что-то значимое можно было вывести; может быть удобно для конфигурации.
  • Когда "тихий" и "строгий": Вероятно, следует рассмотреть возможность использования null в качестве случая ошибки - т.е. каждый объект, управляемый JEXL, должен быть оценен; троичный оператор, особенно форма «?:», может использоваться для обхода исключительных случаев. Вариант использования может быть конфигурацией без неявных значений или значений по умолчанию.
...