Не могу определить статический экземпляр OF внутреннего класса [duplicate]

У меня есть класс MainActivity, где я определил InnerClass внутри. Я хотел бы иметь константу этого InnerClass и сделать его статическим для перемещения его в другие классы, но, похоже, он не работает ...

Вот набросок моей проблемы:

public class MainActivity {

   final public static InnerClass in = new InnerClass();

   public class InnerClass {

   }

}

Я получаю ошибку:

'com.aydinabiar.rubikscubeprototype.MainActivity.this' cannot be referenced from a static context

Может кто-нибудь объяснить мне ошибку и как пройти через это?

Всего 1 ответ


public class InnerClass {

}

имеет неявную ссылку на экземпляр внешнего класса, который его создал:

public class InnerClass {
  private final MainActivity this$0;

  InnerClass(MainActivity this$0) {
    this.this$0 = this$0;
  }
}

Вы не можете создать экземпляр этого класса без существующего экземпляра MainActivity , поэтому вы не можете создать его в статическом контексте внутри MainActivity .

Самое простое решение состоит в том, чтобы сделать InnerClass static (хотя тогда он больше не является внутренним классом, а является просто вложенным классом).