我的问题与Java中不存在函数eval()的现象有关。在互联网上阅读了一些内容之后,我发现我能做的最好的事情就是创建自己的解析器作为Java函数。但是怎么做呢?我实际需要的是一个函数,它读取上面数组的第一列并一个接一个地返回所有这些值。但请注意,这些值是字符串存储在String数组中,因此是字符串,但它们代表不同类型的对象,比如X1,X2,X3,X3等。
如果我设法读取这个String值,比如说x1,作为一个对象,比如说X1,那么我就可以用它来调用一些与对象有关的函数,比如x1.classifyInstance(等等等等等等等等等等)。 );
希望有人知道如何解决这个问题......!
编辑:此主题与我的第一篇帖子here密切相关!
答案 0 :(得分:2)
您可以使用eval()
类的ScriptEngine
方法将字符串评估为javascript字符串
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");
System.out.println("..result..."+String.valueOf(result));
结果= ..result...20.0
答案 1 :(得分:1)
自己构建Java编译器是一项了不起的工作。基本上,有三种选择:
答案 2 :(得分:0)
为了能够在Java中调用对象上的方法,您需要此对象的实例,并且需要使用适当的类型声明变量。唯一的另一种方法是使用反射来调用方法。 Java与JavaScript不同:它是强类型的,并且没有鸭子输入。
你应该做的是让所有这些对象实现一个通用的接口:
public interface Classifyable {
void classify();
}
并使用以下代码(您需要处理异常,但我省略了它们):
for (String s : stringArray) {
// s is the class name of the object to instantiate, right?
Class<?> clazz = Class.forName(s);
Classifyable c = (Classifyable) clazz.newInstance(); // calls the no-arg constructor
c.classify();
}