这是一个理论上的问题,但也许你知道深度的规范会让你回答......为什么这个代码在匿名类是最终的时候会产生错误?在实践中,类可以被认为是final(没有字节码操作就无法扩展它):
public class Modifiers
{
public static void main(final String[] args) throws ClassNotFoundException
{
new Modifiers().go();
}
public void go() throws ClassNotFoundException
{
final Runnable r = new Runnable()
{
@Override
public void run()
{
System.out.println("Inside runnable");
}
};
r.run();
System.out.println(Modifier.isFinal(getClass().getClassLoader().loadClass(Modifiers.class.getName() + "$1").getModifiers()));
}
}
答案 0 :(得分:4)
因为您要检查的匿名内部类Modifiers$1
不是final
。
变量r
为final
,但这并不意味着该类本身为final
。
答案 1 :(得分:1)
好的......明白了:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.9.5无论如何 - 谢谢你的支持!