关于 Java 中私有静态嵌套类的综合访问器的 Eclipse 警告?
我的同事建议对一些 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,以便更清楚。