繁体   English   中英

如何从classLoader和未编译的文件* .java中获取java.lang; Class

[英]How to get java.lang;Class from classLoader and not compiled file *.java

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

这是获得它的某种方式?

更新:

好的,我试图实现机制,将利用它们的主体(方法,变量等)生成动态类。 为此,我需要类定义,例如:方法返回类型或某些变量类型。

示例方案:

用户在IDE(Netbeans)上工作,他创建了一个类(但未编译)。 该类将用在某些类的主体中,我们将在某个事件后动态创建该类(例如,使用some按钮)。 现在,getClassLoader并以java.lang.Class及其使用方式加载类定义是没有问题的。 但是文件需要已经被编译。 现在我想知道这是否是从文件中获取java.lang.Class的某种方式,例如“ someFile.java并打包somePackage

无法为尚未编译的类提供Class对象。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM