Given what I know of every other type of static feature of programming––I would think the answer is 'no'. However, seeing statements like OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
makes me wonder.
Yes, there is nothing in the semantics of a static
nested type that would stop you from doing that. This snippet runs fine.
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>
Now, of course the nested type can do its own instance control (e.g. private
constructors, singleton pattern, etc) but that has nothing to do with the fact that it's a nested type. Also, if the nested type is a static enum
, of course you can't instantiate it at all.
But in general, yes, a static
nested type can be instantiated multiple times.
Note that technically, a static
nested type is not an "inner" type.
An inner class is a nested class that is not explicitly or implicitly declared
static
.
That is, according to JLS terminology, an inner class is one that isn't static
. If it's static
, then it's just a nested type.
So what does static
mean?
static
simply means that the nested type does not need an instance of the enclosing type to be instantiated.