我有一个像下面这样的字符串:
String str = "4*5";
Run Code Online (Sandbox Code Playgroud)
现在我必须20通过使用字符串来获得结果.
我知道在其他一些语言中,这个eval()功能会做到这一点.我怎么能用Java做到这一点?
我将类名存储在属性文件中.我知道类存储将实现IDynamicLoad.如何动态实例化该类?
现在我有
Properties foo = new Properties();
foo.load(new FileInputStream(new File("ClassName.properties")));
String class_name = foo.getProperty("class","DefaultClass");
//IDynamicLoad newClass = Class.forName(class_name).newInstance();
Run Code Online (Sandbox Code Playgroud)
newInstance只加载编译的.class文件吗?如何加载未编译的Java类?
(这个问题类似于我看过的很多问题,但大多数问题对我正在做的事情都不够具体)
背景:
我的程序的目的是让使用我的程序的人轻松制作自定义"插件",然后编译并加载到程序中以供使用(与我的程序中实现的不完整,慢速解析器相比).我的程序允许用户将代码输入到预定义的类中,该类扩展了与我的程序一起打包的编译类.他们将代码输入到文本窗格中,然后我的程序将代码复制到被覆盖的方法中.然后将其保存为.java文件(几乎)为编译器准备好了.该程序运行javac(java编译器),并将保存的.java文件作为输入.
我的问题是,我如何得到它,以便客户端(使用我的编译程序)将这个java文件(扩展我的InterfaceExample)保存在他们的计算机上的任何地方,让我的程序编译它(不说"找不到符号:InterfaceExample" )然后加载它并调用doSomething()方法?
我一直在看Q&A使用的是反射或ClassLoader,几乎描述了如何编译它,但没有一个对我来说足够详细/我完全不理解它们.
我正在编写一个规则引擎,它执行由条件结构确定的简单赋值.规则是XML格式的项目的先决条件.我已经将我的XML模式建模为类似于简单的代码块.我希望解析XML,然后将其转换为Java代码.然后,我希望在运行时编译(并运行)此代码.这样做意味着我的规则引擎不再充当解释器,而是执行本机Java字节代码.
我已经找到了解析阶段和或多或少的Java代码生成阶段.我现在想弄清楚最后阶段 - 运行阶段的编译.
遵循这个线程:编译为java字节码(不使用Java)我已经意识到以下可能的解决方案:
我希望能比较这些以及在运行阶段解决Java编译的其他建议.
我有一个场景,我必须在我的应用程序运行时生成Java代码.
可以编译和运行来自我的应用程序的代码(作为单独的应用程序).
是否可以编译然后从同一个应用程序中使用它.不能想到任何可能性
import subprocess
import os
prefix = os.path.expanduser("~/.bin/kb/")
p = subprocess.Popen([(prefix + "koreball"),(prefix + "/data"),'3'])
Run Code Online (Sandbox Code Playgroud) java ×6
compilation ×3
dynamic ×1
eval ×1
external ×1
load ×1
python ×1
reflection ×1
runtime ×1
subprocess ×1