Eclipse предупреждение о синтетическом аксессоре для частных статических вложенных классов в Java?
Мой коллега предложил сделать несколько настроек форматирования кода и предупреждений в Eclipse более строгими. Большинство из этих изменений имеют смысл, но я получил это, мы предупреждаем в Java. Вот некоторый тестовый код для воспроизведения «проблемы»:
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
Строка с !!! выдает мне это предупреждение в Eclipse с моими новыми настройками предупреждений:
Доступ к вмещающему конструктору 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, чтобы быть более ясным.)