Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 您可以通过编程方式获取类注释吗_Java_Reflection - Fatal编程技术网

Java 您可以通过编程方式获取类注释吗

Java 您可以通过编程方式获取类注释吗,java,reflection,Java,Reflection,是否有可能(有没有一种简洁的方法)使用反射获取类注释?我可以读取.java文件并获得注释,但可能没有注释,因此如果我查找/**的第一个实例,然后*/我可能会得到一个方法注释 请您避免使用代码解决方案,因为我想自己破解它。这是不可能的。注释将从编译的代码中剥离。注释不会保留在类文件中,您必须返回原始源代码以获取注释 如果您在运行时需要信息,则应将其存储在一个或多个注释中,以便在运行时访问。据我所知,无法通过反射来实现这一点。我怀疑commentation/JavaDoc在编译后是否会转入实际的类文

是否有可能(有没有一种简洁的方法)使用反射获取类注释?我可以读取.java文件并获得注释,但可能没有注释,因此如果我查找/**的第一个实例,然后*/我可能会得到一个方法注释


请您避免使用代码解决方案,因为我想自己破解它。

这是不可能的。注释将从编译的代码中剥离。

注释不会保留在类文件中,您必须返回原始源代码以获取注释


如果您在运行时需要信息,则应将其存储在一个或多个注释中,以便在运行时访问。

据我所知,无法通过反射来实现这一点。我怀疑commentation/JavaDoc在编译后是否会转入实际的类文件中。这样做的一种方法是使用注释处理器。注释处理不使用反射,而是源模型/镜像的编译时等价物。它确实允许您获取程序元素的文档,比如类声明或方法。您可以将其保存在元数据文件中,以便在运行时使用。

我认为您无法通过反射获取注释,因为编译器切断了注释,所以它们不在.class中。
举个例子,只有当您告诉Eclipse源文件的位置时,Eclipse才会向您提供javadoc帮助。

如果您真的想这样做,您可以编写一个(外部)应用程序来解析源文件,并提取注释。然后,使用,您可以只接受您感兴趣的注释(例如,关键字“class”上方的注释,或任何您想要的注释)


但如果你不介意我问,你为什么要这样做?如果你真的需要访问这些信息,那意味着你需要将其升级为注释以外的内容。比如应用程序中的某些字符串常量,或者类/方法上的注释,这样编译器就可以保留这些信息,并且可以使用普通的me访问它们方法。

除了其他人已经提到的内容外,从源.java文件读取是而不是反射。反射操作编译的代码,.class文件。

您的确切目标是什么?注释不是生成的代码的一部分,因此在运行时不可用。您可能想看看Javadoclet是否可以在som中帮助您换句话说,编译器会忽略注释。如果我有权访问.java呢file@PeterLawrey我不认为编译器会真正忽略它们,因为它们在注释处理过程中是可以访问的,但它们只是不用于输出实际代码。@G_H,我认为注释处理器只处理注释。我假设是例如,你是说它可以处理javadocs中的注释?@PeterLawrey通常它只会看到包含要处理的注释的类,但是你可以使用通配符
*
查看所有编译单元。它允许你通过javax.lang.model API检查源代码结构。有一种方法可以在elem上查看JavaDoc通过使用
javax.lang.model.util.Elements.getDocComment
进行注释。有关使用注释的软件示例,请参阅