这是一个相当理论性的问题,但也许你知道那么深的规范,可以让你回答…如果匿名类是final的,为什么这段代码会产生false ?在实践中,该类可以被认为是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()));
}
}
因为您正在检查的匿名内部类Modifiers$1
不是final
。
变量r
是final
,但这并不意味着类本身是final
。