首页 > 解决方案 > 静态注释和非静态注释有什么区别?

问题描述

Java 的内部类可以是静态的或非静态的。非静态内部类与封闭类的实例相关联。

注解是一种 Java 接口,与任何其他类一样,它们可以在类中定义。同样,它们可以声明为静态或非静态。这两种选择有什么区别,它们在使用代码时的使用方式有什么区别,是否有任何场景可以使用其中一种?

例子:

public class AnnotationContainer {

  public static @interface StaticAnnotation {}
  public @interface NonstaticAnnotation {}

}

标签: javajava-annotations

解决方案


完全没有区别。嵌套接口始终是静态的。

这在JLS Sec 8.5.1(针对类)中进行了描述:

成员接口是隐式静态的(第 9.1.1 节)。允许成员接口的声明冗余地指定静态修饰符。

JLS Sec 9.5(用于接口):

接口中的成员类型声明是隐式公共和静态的。允许冗余指定这些修饰符中的一个或两个。


推荐阅读