netbeans如何获取java。朗;从类加载器初始化,而不是编译文件*。JAVA
我正在尝试获取java。朗;从尚未编译的文件(*.java)中初始化对象。我开发了一个netbeans plaform插件,我知道如何为源文件夹(src)找到specify classLoader,之后我想为specify file获取类对象。我可以调用loadClass来获取它,但这不适用于未编译的文件。例如:
ClassPath classPath = ClassPath.getClassPath(someFileObject, ClassPath.SOURCE);
ClassLoader loader = classPath.getClassLoader(true);
Class myLookingForClass = loader.loadClass("web.users.User");
// it is file User.java in package web.users
有什么办法吗
更新:
好的,我正在尝试实现一种机制,该机制将生成带有主体(方法、变量等)的动态类。为此,我需要类定义,例如:返回类型的方法或一些变量类型
示例场景:
用户在IDE(Netbeans)上工作,他创建了一个some类(但未编译)。该类将在某个类的主体中使用,我们将在某个事件后动态创建该类(例如,在使用某个按钮时)。现在获取类加载器并将类定义加载为java是没有问题的。lang.类和他们使用。但文件需要已经编译好。现在我想知道这是否是获得java的某种方式。例如“someFile.java”和“package somePackage”
# 1 楼答案
对于尚未编译的类,无法使用
Class
对象您必须理解
java.lang.Class
实际上是一个反映的API,它代表由JVM加载的类,而不仅仅是一般java类的抽象ClassLoader
本身也只适用于类文件结构。java文件与运行的java无关:虽然没有编译,但它们只是一个文本文件另一方面,您可以使用java编译器API以编程方式编译java文件,然后访问已编译的类。请参阅javax.tools了解如何使用此API。也许这个SO question也会有帮助