Java的内部类可以是静态的也可以是非静态的。非静态内部类与封闭类的实例相关联。
注释是一种Java接口,与任何其他类一样,它们可以在类中定义。同样,它们可以声明为静态或非静态。这两种选择之间有什么区别,它们在使用代码时的使用方式有何不同,是否有任何使用其中一种选择的情况?
示例:
public class AnnotationContainer {
public static @interface StaticAnnotation {}
public @interface NonstaticAnnotation {}
}
答案 0 :(得分:7)
完全没有区别。嵌套接口始终是静态的。
这在JLS Sec 8.5.1(针对类)中有描述:
成员接口是隐式静态的(第9.1.1节)。允许声明成员接口冗余地指定静态修饰符。
和JLS Sec 9.5(对于接口):
接口中的成员类型声明是隐式公共和静态的。允许冗余地指定其中一个或两个修饰符。
答案 1 :(得分:1)
在Andy's correct answer上扩展它们是完全相同的,因为它们是一种特殊的接口声明,而“成员接口”无论如何都是隐式静态的:
注释类型声明指定新的注释类型,一种特殊的接口类型。为了区分注释类型声明和普通接口声明,关键字接口前面是一个at符号(@)。
JLS 10 8.5.1. Static Member Type Declarations :
成员接口是隐式静态的(第9.1.1节)。允许声明成员接口冗余地指定static修饰符。
和JLS 10 9.1.1. Interface Modifiers
修饰符static仅适用于成员接口(第8.5.1节,第9.5节),而不适用于顶级接口(第7.6节)。
附注:有趣的是,这些章节不使用第9章顶部定义的术语“嵌套接口”,但它似乎是“成员接口”的同义词:
嵌套接口是任何接口,其声明发生在另一个类或接口的主体内。