【发布时间】:2010-10-29 14:13:55
【问题描述】:
我的同事建议让一些 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。)
【问题讨论】:
-
我不明白一点:拥有一个不能被其他人使用的内部类有什么用处?我想我会把这个类放在一个单独的类文件中,让其他程序员选择它是否对其他作用域有用。
标签: java eclipse nested-class java-synthetic-methods