小编Ran*_*een的帖子

如何按源顺序获取方法

我有一个自定义注释,我想在运行时使用它来显示对象属性。我希望它们以源代码顺序出现,但反射并不能保证Class.getMethods().

有没有办法通过反射或通过注释处理来按源顺序获取方法(如果涉及多个继承级别,至少每个类)?

举个例子,假设我有一个界面 Property

package test;

public @interface Property {
    public String name();
}
Run Code Online (Sandbox Code Playgroud)

和一个使用该注释的类

package test;

public class MyObject {
    @Property(name = "First")
    public void getFirst() {}

    @Property(name = "Another")
    public void getAnother() {}
}
Run Code Online (Sandbox Code Playgroud)

我想在属性“另一个”之前可靠地获得“第一个”属性。

我知道我可以在我的注释中添加一个排序属性并对其进行排序,但是如果需要的话,我有很多需要更新的类,所以我正在寻找一种通用方法来实现这一点,而无需修改单个注释。

java annotations annotation-processing

5
推荐指数
1
解决办法
1303
查看次数

如何避免ANTLR 4中的相互左递归

我正在写一个语法来处理标量和向量表达式.下面的语法被简化以显示我所遇到的问题,其中标量表达式可以从向量导出,并且向量可以从标量导出.例如,矢量可以是文字[1, 2, 3]或标量和矢量2 * [1, 2, 3](相当于[2, 4, 6])的乘积.标量可以是文字2或向量的索引[1, 2, 3][1](相当于2).

grammar LeftRecursion;

Integer
    : [0-9]+
    ;

WhiteSpace
    : [ \t\r\n]+ -> skip
    ;

input
    : expression EOF;

expression
    : scalar
    | vector
    ;

scalar
    : Integer
    | vector '[' Integer ']'
    ;

vector
    : '[' Integer ',' Integer ',' Integer ']'
    | scalar '*' vector
    ;
Run Code Online (Sandbox Code Playgroud)

ANTLR4给了我错误:The following sets of rules are mutually left-recursive [scalar, vector] …

left-recursion antlr4

5
推荐指数
1
解决办法
4549
查看次数

Gradle javadoc 搜索重定向到“/undefined/..” URL

我正在使用 Java 11 和 gradle 为不使用模块的项目生成 javadoc,使用以下配置。

文档生成正确,但导航到搜索结果会生成未找到的文件而不是预期的页面。URL 中包和类名之前有一个额外的“undefined/”(例如“.../doc/undefined/package/Class.html”)。

javadoc与Maven有一个类似的问题,但我看不到如何--no-module-directories在gradle中添加该选项。

task allJavadoc (type: Javadoc, description: 'Generate javadoc from all projects', group: 'Documentation') {
    destinationDir = file("$projectDir/doc")
    title = "Title"
    maxMemory = "2048m"
    failOnError true
    options.author false
    options.version true
    options.use true
    options.links "https://docs.oracle.com/en/java/javase/11/docs/api/"
    options.breakIterator true

    subprojects.each { proj ->
        proj.tasks.withType(Javadoc).each { javadocTask ->
            classpath += javadocTask.classpath
            excludes += javadocTask.excludes
            includes += "**/*.java"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

javadoc gradle

5
推荐指数
1
解决办法
428
查看次数