Код: Выделить всё
package com.example.bugs;
public class WeirdInnerClassJavaWarning {
private static class InnerClass
{
public void doSomething() {}
}
final private InnerClass anInstance;
{
this.anInstance = new InnerClass(); // !!!
this.anInstance.doSomething();
}
}
// using "this.anInstance" instead of "anInstance" prevents another warning,
// Unqualified access to the field WeirdInnerClassJavaWarning.anInstance
Доступ к включающему конструктору
WeirdInnerClassJavaWarning.InnerClass()
эмулируется синтетическим методом доступа
. Увеличение видимости
повысит вашу эффективность.
Что это значит? Предупреждение исчезает, когда я меняю «частный статический класс» на «защищенный статический класс», что для меня не имеет смысла.
Изменить: Наконец-то я нашел «правильное» исправление. Реальная проблема здесь заключается в том, что в этом вложенном частном статическом классе отсутствует общедоступный конструктор. Эта настройка удалила предупреждение:
Код: Выделить всё
package com.example.bugs;
public class WeirdInnerClassJavaWarning {
private static class InnerClass
{
public void doSomething() {}
public InnerClass() {}
}
final private InnerClass anInstance;
{
this.anInstance = new InnerClass();
this.anInstance.doSomething();
}
}
Я до сих пор не понимаю, почему сделать вложенный класс защищенным, а не закрытым — это еще один метод решения «проблемы», но, возможно, это причуда/ ошибка Eclipse.
(извиняюсь, мне следовало назвать это NestedClass вместо InnerClass, чтобы было более понятно.)
Подробнее здесь: https://stackoverflow.com/questions/921 ... sses-in-ja