Но разве теоретически невозможно объявить статические члены в локальном классе?
Внутренний класс неявно связан с объектом его внешнего класса, поэтому существованиекласс InnerClass полностью зависит от каждого из объектов класса OuterClass.
Давайте представим, что вы не объявляете 'i' как final, и вы создаете экземпляры a и b класса OuterClass, два экземпляранезависимы друг от друга. Мы можем установить:
OuterClass a = new OuterClass();
OuterClass.InnerClass a1 = a.new InnerClass();
a1.i = 9;
OuterClass b = new OuterClass();
OuterClass.InnerClass b1 = b.new InnerClass();
b1.i = 18;
Хм, статическая переменная с двумя различными значениями, существует параллельно, не зависит друг от друга (потому что a и b не зависят друг от друга).
Этого не может быть, потому что статические переменные, по сути, являются глобальными переменными. Все экземпляры класса InnerClass должны использовать одну и ту же статическую переменную.
Но почему бы и нет ??
OuterClass outer = new OuterClass(); //I modified the variable name to avoid confusion
outer.InnerClass innerclassInstance = new outer.InnerClass();
По соглашению
Type name = new Type();
, поэтому внешний (имя) не может быть преобразован в тип.
Вы можете сделать это следующим образом:
OuterClass.InnerClass innerclassInstance = new OuterClass().new InnerClass();
Надеюсь, мой ответ может помочь вам.