静态嵌套类可以多次实例化吗?
2022-09-01 18:46:53
鉴于我对所有其他类型的静态编程特性的了解--我认为答案是否定的。但是,看到这样的陈述会让我想知道。OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
鉴于我对所有其他类型的静态编程特性的了解--我认为答案是否定的。但是,看到这样的陈述会让我想知道。OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
是的,嵌套类型的语义中没有任何东西可以阻止您这样做。此代码段运行良好。static
public class MultipleNested {
static class Nested {
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Nested();
}
}
}
public static interface Map.Entry<K,V>
public static class AbstractMap.SimpleEntry<K,V>
现在,嵌套类型当然可以执行自己的实例控制(例如 构造函数,单例模式等),但这与它是嵌套类型的事实无关。此外,如果嵌套类型是 ,当然您根本无法实例化它。private
static enum
但通常,是的,嵌套类型可以多次实例化。static
请注意,从技术上讲,嵌套类型不是“内部”类型。static
内部类是未显式或隐式声明的嵌套类。
static
也就是说,根据JLS术语,内部类不是。如果是 ,则它只是一个嵌套类型。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());
}
}
}
当然,结果是:
0
1
2
3
.
.
.
97
98
99