gpt4 book ai didi

java - 如何在 Janino 脚本中表示值列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:08 24 4
gpt4 key购买 nike

我正在使用 Janino 来评估脚本,但我不知道如何在脚本中表示值列表

<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.0</version>
</dependency>

我需要评估 containsAll 脚本,例如:attributeA.containsAll([3,5])

我尝试使用 [] 和 Arrays.asList 但编译器要么说:“org.codehaus.commons.compiler.CompileException:第 1 行,第 25 列:主要标记“[””或者它说:org.codehaus.commons.compiler.CompileException:第 1 行,第 32 列:未知变量或类型“数组”


import com.my.project.MyCollection;
import org.codehaus.commons.compiler.CompileException;
import org.codehaus.janino.ExpressionEvaluator;

private static void evalExpression(Map<String, MyCollection> fields)
{
String script= "attributeA.containsAll([3,5])";

try {
ExpressionEvaluator ee = new ExpressionEvaluator();

Class[] parameterTypes = new Class[fields.size()];
String[] parameterNames = new String[fields.size()];
Object[] arguments = new Object[fields.size()];
int i = 0;
for (Map.Entry<String, MyCollection> field : fields.entrySet()) {
String fieldName = field.getKey();
MyCollection fieldValues = field.getValue();

parameterNames[i] = fieldName;
parameterTypes[i] = MyCollection.class;
arguments[i]=fieldValues;

i++;
}

ee.setParameters(parameterNames, parameterTypes);

ee.setExpressionType(Boolean.class);

// And now we "cook" (scan, parse, compile and load) the fabulous expression.
ee.cook(script);

// Eventually we evaluate the expression - and that goes super-fast.

Boolean result = (Boolean) ee.evaluate(arguments);
System.out.println(result);

}
catch (Exception ex){
System.out.println(ex.getMessage());
}
}

我期望输出为 false/true,但实际上抛出了 org.codehaus.commons.compiler.CompileException

最佳答案

我添加到脚本中:“导入静态java.util.Arrays.asList;”

并使用语法:attributeA.containsAll(asList(3,5))

关于java - 如何在 Janino 脚本中表示值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57941810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com