Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
eval()在Java中的实现_Java_Eval - Fatal编程技术网

eval()在Java中的实现

eval()在Java中的实现,java,eval,Java,Eval,我的问题与Java中函数eval()不存在的现象有关。在互联网上读了一会儿之后,我发现我能做的最好的事情就是创建我自己的解析器作为Java函数。但如何做到这一点呢?实际上我需要的是一个函数,它读取上述数组的第一列,然后一个接一个地返回所有这些值。但是请注意,这些值是存储在字符串数组中的字符串,因此是字符串,但它们表示不同类型的对象,例如X1、X2、X3、X3等 如果我设法将这个字符串值(比如x1)作为对象(比如x1)读取,那么我就能够使用它来调用一些与对象x1相关的函数,比如x1.classif

我的问题与Java中函数eval()不存在的现象有关。在互联网上读了一会儿之后,我发现我能做的最好的事情就是创建我自己的解析器作为Java函数。但如何做到这一点呢?实际上我需要的是一个函数,它读取上述数组的第一列,然后一个接一个地返回所有这些值。但是请注意,这些值是存储在字符串数组中的字符串,因此是字符串,但它们表示不同类型的对象,例如X1、X2、X3、X3等

如果我设法将这个字符串值(比如x1)作为对象(比如x1)读取,那么我就能够使用它来调用一些与对象x1相关的函数,比如x1.classifyInstance(等等)

希望这里有人知道如何解决这个问题


编辑:这个帖子与我的第一篇帖子紧密相连

要能够在Java中对对象调用方法,您需要该对象的实例,并且需要使用适当的类型声明一个变量。唯一的其他方法是使用反射来调用该方法。Java不像JavaScript:它是强类型的,没有duck类型

您可能应该做的是让所有这些对象实现一个公共接口:

public interface Classifyable {
    void classify();
}
并使用以下代码(您需要处理异常,但我省略了它们):

for(字符串s:stringArray){
//s是要实例化的对象的类名,对吗?
clazz类=Class.forName类;
Classifyable c=(Classifyable)clazz.newInstance();//调用无参数构造函数
c、 分类();
}

要能够在Java中对对象调用方法,您需要该对象的实例,并且需要使用适当的类型声明一个变量。唯一的其他方法是使用反射来调用该方法。Java不像JavaScript:它是强类型的,没有duck类型

您可能应该做的是让所有这些对象实现一个公共接口:

public interface Classifyable {
    void classify();
}
并使用以下代码(您需要处理异常,但我省略了它们):

for(字符串s:stringArray){
//s是要实例化的对象的类名,对吗?
clazz类=Class.forName类;
Classifyable c=(Classifyable)clazz.newInstance();//调用无参数构造函数
c、 分类();
}
您可以使用类的方法将字符串作为javascript字符串计算

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");        
Object result = engine.eval("4*5");
System.out.println("..result..."+String.valueOf(result));
Result=
。Result…20.0

您可以使用类的方法将字符串作为javascript字符串计算

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");        
Object result = engine.eval("4*5");
System.out.println("..result..."+String.valueOf(result));

Result=
。Result…20.0

自行构建Java编译器是一项艰巨的工作。基本上有三种选择:

  • 使用ToolProvider.getSystemJavaCompiler()。在的第二个答案也使用了这个,可能会给你一个如何使用它的想法
  • 使用第三方java编译器,如java编译器Janino
  • 使用ScriptEngineManager使用Javascript(或其他语言)编译器,并将Javascript数组转换为Java

  • 自己构建Java编译器是一项艰巨的工作。基本上有三种选择:

  • 使用ToolProvider.getSystemJavaCompiler()。在的第二个答案也使用了这个,可能会给你一个如何使用它的想法
  • 使用第三方java编译器,如java编译器Janino
  • 使用ScriptEngineManager使用Javascript(或其他语言)编译器,并将Javascript数组转换为Java

  • 你真正想要的。。。请说得更准确些…听起来你在这里寻找一些选择,也许在这里你真正想要的。。。请说得更准确些……听起来你好像在这里寻找一些选择,也许在这里