我试图从尚未编译的文件(* .java)中获取java.lang; Class对象。我为netbeans平台开发了一个插件,我知道如何为源文件夹(src)找到指定的classLoader,之后我想获取指定文件的Class对象。我可以调用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
这是获得它的一些方法吗?
更新
好的,我尝试实现机制whitch将使用它们的主体(方法,变量等)生成动态类。要做到这一点,我需要类定义,例如:方法返回类型或一些变量类型。
示例方案:
用户在IDE(Netbeans)上工作,他创建了一个类(但没有编译)。这个类将被用户在一些类动作的主体中,我们将在一些事件后动态创建(例如在使用某个按钮时)。现在,getClassLoader和加载类定义为java.lang.Class并使用它们没有问题。但是文件需要已经编译好了。现在我想知道是否有一些方法可以从文件中获取java.lang.Class,例如“someFile.java和package somePackage
答案 0 :(得分:1)
对于尚未编译的类,无法拥有Class
对象。
您必须了解java.lang.Class
实际上是一个反射 API,它表示由JVM加载的类,而不仅仅是一个java类的抽象。 ClassLoader
本身也只适用于类文件结构。 .java文件与正在运行的 Java无关:虽然没有编译,但它们只是一个文本文件。
另一方面,您可以使用Java Compiler API以编程方式编译java文件,然后访问已编译的类。请参阅javax.tools以了解如何使用此API。也许这SO question也会有所帮助。