我想用注释创建树结构

@Retention(RetentionPolicy.RUNTIME)
public @interface MyNode {
     String name();
     MyNode next() default null;
}

但是编译器告诉它是循环,因此是不允许的。

我想知道为什么不允许这样做,我该如何制作类似的东西?

最佳答案

  • 注释是编译时常量。
  • 注释成员只能是编译时常量(字符串、原语、枚举、注释、类文字)。
  • 任何引用自身的东西都不能是常量,所以注解不能引用自身。

  • 有趣的是:Java 语言规范中有一部分似乎与此矛盾:



    但是我得到了一个编译错误(注释引用本身):
    public @interface Funky {
        Funky funky();
    }
    

    和这个(两个注释相互引用):
    public @interface Funky {
        Monkey monkey();
    }
    public @interface Monkey {
        Funky funky();
    }
    

    关于java循环注解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7075761/

    10-11 04:45