Эта проблема возникает, когда вы пытаетесь создать экземпляр нестатического внутреннего класса в контексте, который не указывает (или подразумевает) экземпляр включающего класса.
Из этого я делаю вывод, чтовы объявили один из ваших классов нестатическим внутренним классом;например, что-то вроде этого:
public class Outer {
...
public class Inner {
public Inner() {
...
}
...
}
...
}
Если вы сейчас попытаетесь создать экземпляр Inner
в каком-то другом коде, используя new Inner()
, вы получите ошибку компиляции, подобную той, которую вы видите.
Вы можете сделать одну из двух вещей, чтобы «исправить» проблему:
Если вы измените public class Inner {
на public static class Inner {
, вы можете использовать new Inner()
как есть.в настоящее время делает.Но это будет означать, что код Inner
не может получить доступ к (окончательным) переменным экземпляра окружающего класса;т.е. Outer
.
Если вы не хотите изменять Inner
на статический класс, вам нужно создать его экземпляр следующим образом:
Outer outer = ...
...
Inner inner = outer.new Inner(); // qualified creation
FOLLOWUP
какой-либо недостаток, использующий статический класс для вызова свинга?
Только тот, который я указал выше.
Итак, все экземпляры происходят внутри Внешнего конструктора?право?
Нет.Код в приведенном выше примере «квалифицированного создания» может появиться везде, где доступен класс Inner
.И поскольку мы объявили его как public
...
Если вы создаете экземпляр Inner
внутри конструктора (или метода экземпляра) для Outer
, вы можете просто использовать new Inner()
.Включающий экземпляр Outer
совпадает с this
.