Java 喷气发动机的建造工不工作?(无法应用于给定类型)

Java 喷气发动机的建造工不工作?(无法应用于给定类型),java,jexl,Java,Jexl,我试图初始化一个JexlEngine对象,但构造函数不允许我这样做(尽管文档中说明应该这样做) 以下是JexlEngine类的文档(在jexl3中): 最初代码与jexl2导入一起工作,但我最近将该项目转换为Maven,并不得不换成jexl3。现在,构造函数不再工作 我遗漏了什么吗 我用Netbeans在Java1.8上运行这个项目——这是一个Maven项目,包含了对jexl3的依赖性(但用于处理jexl2) 我的代码: public static final JexlEngine jexl

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

以下是JexlEngine类的文档(在jexl3中):

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

我遗漏了什么吗

我用Netbeans在Java1.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
未能在project bilbon core上执行目标org.apache.maven.plugins:maven编译器插件:3.1:compile(默认编译):编译失败:编译失败:
类org.apache.commons.jexl3.JexlEngine中的si/smth/project/bean/CUtil.java:[333,43]构造函数JexlEngine不能应用于给定类型;
必需:无参数
找到:,si.smth.project.bean.CUtil.my算术,,
原因:实际参数列表和正式参数列表长度不同
si/smth/project/bean/CUtil.java:[333,99]不是抽象的,并且不会覆盖org.apache.commons.jexl3.JexlEngine中的抽象方法newInstance(java.lang.String、java.lang.Object…)
si/smth/project/bean/CUtil.java:[336,13]找不到符号
符号:方法setCache(int)
位置:org.apache.commons.jexl3.JexlEngine类型的变量jexl
si/smth/project/bean/CUtil.java:[337,13]找不到符号

使用空构造函数,它是

或如jexl中所述使用:

您可以为设置器调用生成器方法:

JexlEngine jexl = strict(true).silent(false).cache(512) .create();
您有
setSilent
setStrict
组合,而不是宽松标志:

setSilent和setStrict方法允许根据各种错误控制需求微调引擎实例行为。strict标志告诉引擎何时以及如果将null作为操作数视为错误,silent标志告诉引擎如何处理错误(log as warning或throw exception)

  • 当“沉默”和“不严格”时: 0&null应该是“默认”值的指示符,这样即使在出现错误的情况下,仍然可以推断出有意义的内容;可能便于配置
  • 当“沉默”和“严格”时: 我们应该考虑将NULL作为一个错误案例——即,应该对JEXL操作的每个对象进行赋值;三元运算符,特别是“?:”形式可用于解决异常情况。用例可以是没有隐式值或默认值的配置

使用空构造函数,它是中唯一的构造函数

或如jexl中所述使用:

您可以为设置器调用生成器方法:

JexlEngine jexl = strict(true).silent(false).cache(512) .create();
您有
setSilent
setStrict
组合,而不是宽松标志:

setSilent和setStrict方法允许根据各种错误控制需求微调引擎实例行为。strict标志告诉引擎何时以及如果将null作为操作数视为错误,silent标志告诉引擎如何处理错误(log as warning或throw exception)

  • 当“沉默”和“不严格”时: 0&null应该是“默认”值的指示符,这样即使在出现错误的情况下,仍然可以推断出有意义的内容;可能便于配置
  • 当“沉默”和“严格”时: 我们应该考虑将NULL作为一个错误案例——即,应该对JEXL操作的每个对象进行赋值;三元运算符,特别是“?:”形式可用于解决异常情况。用例可以是没有隐式值或默认值的配置

除了无参数构造函数外,没有提到任何构造函数。IDE应该已经将构造函数调用标记为错误。如果没有,IDE使用的JEXL库与maven build使用的JEXL库之间可能存在版本不匹配的问题。还要注意,maven“找不到符号[…]方法setCache(int)”,这是有意义的,因为文档也没有提到该方法。除了无参数的构造函数外,没有提到任何构造函数。IDE应该已经将构造函数调用标记为错误。如果没有,IDE使用的JEXL库和maven build使用的JEXL库之间可能存在版本不匹配。还要注意,maven“找不到符号[…]方法setCache(int)”,这很有意义,因为文档中也没有提到该方法。非常感谢您的帮助!第一个不起作用,因为它是一个抽象类,但后一个工作起来很有魅力。剩下要处理的唯一问题是setter不能工作,比如:jexl.setCache(512);但我会仔细阅读一下文档,看看我能做些什么。谢谢@BgZape更新了答案JexlEngine jexl=strict(真)。silent(假)。cache(512)。create()非常感谢您的帮助!第一个不起作用,因为它是一个抽象类,但后一个工作起来很有魅力。剩下要处理的唯一问题是setter不能工作,比如:jexl.setCache(512);但我会仔细阅读一下文档,看看我能做些什么。谢谢@BgZape更新了答案JexlEngine jexl=strict(真)。silent(假)。cache(512)。create()
JexlEngine jexl = strict(true).silent(false).cache(512) .create();