我的同事建议使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() 是由合成的访问器方法进行模拟的。增加其可见性将提高性能。
这是什么意思?当我将 "private static class" 更改为 "protected static class" 时,警告消失了,但对我来说毫无意义。
编辑: 我最终找到了 "正确" 的解决方法。真正的问题似乎是这个嵌套的私有静态类缺少一个公共构造函数。那个微调消除了警告:
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();
}
}
我想将该类作为私有嵌套类(这样其它的类就无法访问它,包括封闭类的子类),并且我想将其定义为静态类。
我仍然不明白为什么将嵌套类声明为protected而不是private是解决“问题”的另一种方法,但也许这是Eclipse的一个怪异/错误之处。
(抱歉,我应该将其称为NestedClass而不是InnerClass以使其更加清晰。)