sto*_*986 22 java static nested-class
鉴于我所知道的其他类型的静态编程功能 - 我认为答案是'不'.然而,看到这样的陈述OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
让我感到奇怪.
pol*_*nts 31
是的,static
嵌套类型的语义中没有任何内容可以阻止您这样做.这个片段运行正常.
public class MultipleNested {
static class Nested {
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Nested();
}
}
}
Run Code Online (Sandbox Code Playgroud)
public static interface Map.Entry<K,V>
public static class AbstractMap.SimpleEntry<K,V>
现在,嵌套类型当然可以进行自己的实例控制(例如private
构造函数,单例模式等),但这与嵌套类型无关.另外,如果嵌套类型是a static enum
,当然你根本无法实例化它.
但总的来说,是的,static
嵌套类型可以多次实例化.
请注意,从技术上讲,static
嵌套类型不是"内部"类型.
一个内部类是没有明确或隐含声明嵌套类
static
.
也就是说,根据JLS术语,内部类是不是static
.如果是static
,那么它只是一个嵌套类型.
那static
意味着什么?
static
简单地说,嵌套类型不需要实例化封闭类型的实例.
@polygenelubricants:但总的来说,是的,静态嵌套类型可以多次实例化.
只是为了确保100%我扩展你的片段:
public class MultipleInner {
static class Inner {
private int state;
public int getState() { return state; }
public void setState(int state) { this.state = state; }
}
public static void main(String[] args) {
List<Inner> inners = new ArrayList<Inner>();
for (int i = 0; i < 100; i++) {
Inner inner = new Inner();
inner.setState(i);
inners.add(inner);
}
for (Inner inner : inners) {
System.out.println(inner.getState());
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然结果是:
0
1
2
3
.
.
.
97
98
99
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6696 次 |
最近记录: |