我的意思是,打开一个带有Java代码的文件作为一个类,而不是文件。所以基本上我想:
- >在自编写的Java应用程序中打开纯文本文件(.txt / .log / .java) - >识别文件中的类,例如:
public class TestExample {
private String example;
public String getExample() {
return example;
}
}
我将在手写程序中打开它。它不是将文件中的文本识别为String或纯文本,而是在其中找到类TestExample。然后它会将其保存为类。
- >在类上使用Reflection API - >从文件中获取字段,方法等并显示它们
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。
看看这个例子。
http://weblogs.java.net/blog/malenkov/archive/2008/12/how_to_compile.html
知道如何查找和阅读文件(这非常简单),然后您可以使用显示的代码,尤其是
javax.tools.JavaCompiler
javax.tools.ToolProvider.getSystemJavaCompiler()
编译代码然后使用反射调用它。
答案 1 :(得分:1)
您可以“动态”编译Java代码。请参阅示例:How do I on-the-fly compile a java source contained in a String?
创建类加载器并使用反射
答案 2 :(得分:1)
您可能需要查看Beanshell。
答案 3 :(得分:0)
我知道这已经过时了,但想加入主题:
是的,这是可能的。基本上你已经在java中使用JavaCompiler类来在运行时编译任何字符串并返回一个可用于实例化对象的java.lang.Class实例。
我为我正在进行的项目编写了一个小的,最小的库。您可以随意使用图书馆。 EzReflection允许您在内存中完全编译代码,而无需编写.class文件。
使用ezReflections,您的代码将如下所示:
InMemoryEzReflectionsCompiler compiler = new InMemoryEzReflectionsCompiler();
String src = new Scanner(new File("filename")).useDelimiter("\\Z").next();
Class<?> cls = compiler.compileClass("name of class", src);
// if your class doesn't require arguments in the constructor
cls.newInstance();
// if your class requires arguments for the constructor. Here assuming one Integer and one double
Constructor<?> cons = cls.getConstructor(new Class[]{Integer.class,double.class});
Object obj = cons.newInstance(new Object[]{(int)10,(double)9});
您还可以在Github页面上找到有关如何使用ezReflections的一组教程。