2014-10-31 26 views
0

我试图从尚未编译的文件(* .java)中获取java.lang; Class对象。我开发了一个NetBeans平台的插件,我知道如何找到为源文件夹(src)指定classLoader,然后我想获取指定文件的Class对象。我可以调用loadClass来获取它,但是这个dosent在没有编译的文件上工作。例如:如何从classLoader获得java.lang;类而不是编译文件* .java

 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 

它是一种获得它的方法吗?

UPDATE:

好吧,我想实现机制whitch将产生自己的身体动态类(方法,变量等)。要做到这一点,我需要类的定义例如:方法返回类型或一些变量类型。

示例方案:

用户工作的IDE(Netbeans的),他创造了一些类(但不编译)。这个类将在某些类中使用,我们将在某些事件后动态创建(例如使用某个按钮)。现在,将ClassLoader和加载类定义为java.lang.Class并使用它们是没有问题的。但是文件需要被编译。现在我想知道是否有某种方式从文件中获取java.lang.Class,例如“someFile.java和打包某些包

+0

类加载器无法加载未编译的类;它应该怎么做? – 2014-10-31 13:04:01

+0

这味道像一个XY问题。你为什么要这样做?你的根本问题是什么? – 2014-10-31 13:05:10

回答

1

没有办法为尚未编译的类有一个Class对象

你必须明白,java.lang.Class确实是一个反射 API表示由JVM加载,而不是仅仅在一般的Java类的抽象类。ClassLoader本身也有一个类文件结构才起作用。.java文件没有什么用运行 Java:虽然没有编译它们只是一个文本文件。

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

+0

好吧,我看到我需要先使用JavaCompiler和动态编译文件,然后从该动态编译文件中获得java.lang,Class – 2014-10-31 13:30:58

相关问题