asp*_*sen -1 java reflection javaparser
我在 Java 解析方面遇到了一些困难。我需要以某种方式通过反射获取类、字段、方法等的注释。
我找到了JavaParser,它看起来可以引发注释,但我不知道如何做到这一点,因为所有示例都只是解析给定的字符串。我发现TypeSolver可以采用规范名称,但看起来它不能与注释一起使用。
我的问题是,如果我只有评论,Class<?>并且该项目还有其他一些jar's也应该反思的评论,那么如何找到评论。通过调试,我看到了原始源代码,看起来可以以某种方式完成。
谢谢。
PS我有源代码,我需要Class<?>与源代码匹配,然后通过JavaParser提取注释
首先,你不能直接使用反射来获取注释,也不能通过使用读取“.class”文件的库来获取它们。该信息不存在于“.class”文件中,并且反射仅知道可从那里直接获得的信息。
正如人们所指出的,只有拥有源代码才能获得评论。如果您有源代码文件,您应该能够使用JavaParser或(可能)其他一些库提取注释,...或者通过编写自己的解析器。
问题将是从Class对象映射到相应的源代码文件。让我们假设您有多个源树对应于应用程序类路径上的多个 JAR。你会需要:
方法是:
Class。foo.bar.Baz会变成foo/bar/Baz.javaclazz.getProtectionDomain().getCodeSource().getLocation().toURI()获取加载类的 URI。上述某些步骤可能会出现问题。例如:
getCodeSource()可以返回null,URI可能有一个奇怪的协议,打开源文件后,您可以Reader使用您选择的 Java 解析器构建并解析源代码。
如果您的项目是一个“绿色领域”项目,那么定义自定义注释类型(具有保留运行时)并将您的注释转换为注释可能会更简单。这些注释可以简单快速地提取,并且不会出现上述任何可能的故障模式。
但另一方面,与注释相比,注释(在源代码中)编写起来很麻烦。此外,您还会使用额外的注释来使“.class”文件变得臃肿。
我不知道如何做到这一点,因为所有 [JavaParser] 示例都只是解析给定的字符串。
javadoc显示您可以使用实例来解析 a 、 an 、 a或 a 。JavaParserFileInputStreamReaderString