您可以按照以下说明摆脱警告:
package com.example.bugs;public class WeirdInnerClassJavaWarning { private static class InnerClass { protected InnerClass() {} // This constructor makes the warning go away public void doSomething() {} } final private InnerClass anInstance; { this.anInstance = new InnerClass(); this.anInstance.doSomething(); }}就像其他人所说的那样,Eclipse抱怨的是,除非通过Java编译器创建的综合方法,否则无法从外部实例化没有显式构造函数的私有类。如果使用代码,对其进行编译,然后使用jad(*)对其进行反编译,则会得到以下内容(重新格式化):
public class Test { private static class InnerClass { public void doSomething() {} // DEFAULT ConSTRUCTOR GENERATED BY COMPILER: private InnerClass() {} // SYNTHETIC METHOD GENERATED BY THE JAVA COMPILER: InnerClass(InnerClass innerclass) { this(); } } public Test() { anInstance.doSomething(); } // Your instance initialization as modified by the compiler: private final InnerClass anInstance = new InnerClass(null);}如果添加受保护的构造函数,则不需要合成代码。我认为,使用公共或受保护的构造函数,从理论上讲,合成代码比非合成代码要慢很多。
(*)对于jad,我链接到了Wikipedia页面…托管此程序的域已过期,但Wikipedia链接到了一个我未测试过的域。我知道还有其他(可能是较新的)反编译器,但这是我开始使用的反编译器。注意:当反编译最近的Java类文件时,它会
发出抱怨 ,但是它仍然做得很好。



