3 回答
TA贡献1842条经验 获得超21个赞
不,您不能,也不,编译器无法弄清楚。这就是为什么FindBugs总是建议static如果匿名内部类不使用隐式this引用,则将其更改为命名嵌套类。
编辑: Tom Hawtin-tackline说,如果匿名类是在静态上下文中创建的(例如在main方法中),则实际上是匿名类static。但是联合检查组不同意:
永远不会有匿名类abstract(第8.1.1.1节)。匿名类始终是内部类(第8.1.3节);从来没有static(§8.1.1,§8.5.1)。匿名类始终是隐式的final(第8.1.1.2节)。
Roedy Green的Java词汇表说,在静态上下文中允许匿名类的事实取决于实现:
如果您想让那些维护您代码的人感到困惑,那么笨拙的发现javac.exe会允许staticinit代码和static方法中包含匿名类,即使语言规范说从来没有匿名类static。当然,这些匿名类无法访问该对象的实例字段。我不建议这样做。该功能可以随时拉出。
编辑2: JLS实际上在§15.9.2中更明确地涵盖了静态上下文:
令C为实例化的类,令我为正在创建的实例。如果C是一个内部类,那么我可能有一个立即封闭的实例。i的紧邻实例(第8.1.3节)的确定如下。
如果C是一个匿名类,则:
如果类实例创建表达式在静态上下文中出现(第8.1.3节),则我没有立即封闭的实例。
否则,i的直接封闭实例为this。
因此,静态上下文中的匿名类与static嵌套类大致等效,因为它在技术上不是类,但它不保留对封闭类的引用static。
添加回答
举报