如果接口(interface)
没有构造函数,那么这段代码如何编译?
interface I {
List<Integer> LIST = Arrays.asList(1, 2, 3);
}
谁在这里初始化List
?
最佳答案
Do interfaces really have no constructors?
是的。它们无法被实例化。
Who initializes LIST here?
接口(interface)的隐式静态初始值设定项...在任何内容可以使用 LIST
对象1之前调用一次。
接口(interface)声明的字段隐式为 public
、static
和 final
( JLS 9.3 ),并且任何初始化均由接口(interface)的静态初始化( JLS 9.3.1/12.4.2 )。
1 - 实际上,这并不完全正确。可以编写一个程序,在静态字段正确初始化之前就使用该静态字段。 (详细信息在 JLS 中。)但这需要做一些事情......而且你不应该......
关于java - 接口(interface)真的没有构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899156/