1

我正在尝试初始化一个 JexlEngine 对象,但构造函数不允许我这样做(尽管文档说明它应该这样做)。

这是 JexlEngine 类的文档(在 jexl3 中): https ://people.apache.org/~henrib/jexl-3.0/apidocs/org/apache/commons/jexl3/JexlEngine.html

最初代码与 jexl2 导入一起使用,但我最近将项目转换为 Maven,而不得不换成 jexl3。现在构造函数不再起作用。

我错过了什么吗?

我在 Java 1.8 上的 Netbeans 中运行这个项目 - 它是一个 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
4

1 回答 1

0

使用空构造函数,这是最新的 java 文档中唯一的构造函数

JexlEngine jexl = new JexlEngine();

或者使用jexl中描述的 JexlBuilder:

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

您可以为您的设置器调用构建器方法:

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

您拥有的不是 Lenient 标志setSilentsetStrict组合:

setSilent 和 setStrict 方法允许根据各种错误控制需求微调引擎实例行为。strict 标志告诉引擎何时以及如果 null 作为操作数被认为是错误,silent 标志告诉引擎如何处理错误(记录为警告或抛出异常)。

  • 当 "silent" & "not-strict": 0 & null 应该是 "default" 值的指示符,这样即使在错误的情况下,仍然可以推断出有意义的东西;可能便于配置。
  • 当“静默”和“严格”时:可能应该考虑使用 null 作为错误情况 - 即,应该重视 JEXL 操作的每个对象;三元运算符,尤其是 '?:' 形式可用于解决异常情况。用例可以是没有隐含值或默认值的配置。
于 2019-06-12T09:32:29.330 回答