为什么这段代码对final修饰符产生false



这是一个相当理论性的问题,但也许你知道那么深的规范,可以让你回答…如果匿名类是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

变量rfinal,但这并不意味着类本身是final

相关内容

  • 没有找到相关文章

最新更新