如何从classLoader获取java.lang; Class而不是编译文件* .java

时间:2014-10-31 12:45:03

标签: java netbeans netbeans-platform

我试图从尚未编译的文件(* .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

1 个答案:

答案 0 :(得分:1)

对于尚未编译的类,无法拥有Class对象。

您必须了解java.lang.Class实际上是一个反射 API,它表示由JVM加载的类,而不仅仅是一个java类的抽象。 ClassLoader本身也只适用于类文件结构。 .java文件与正在运行的 Java无关:虽然没有编译,但它们只是一个文本文件。

另一方面,您可以使用Java Compiler API以编程方式编译java文件,然后访问已编译的类。请参阅javax.tools以了解如何使用此API。也许这SO question也会有所帮助。