【问题标题】:Why this code yields false for final modifier? [duplicate]为什么这段代码对 final 修饰符产生 false ? [复制]
【发布时间】:2014-08-08 11:52:40
【问题描述】:

这是一个相当理论的问题,但也许您知道可以让您回答的规范……为什么根据匿名类是否为最终类,这段代码会产生错误?在实践中,这个类可以被认为是最终的(没有字节码操作就无法扩展它):

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()));
    }
}

【问题讨论】:

    标签: java reflection final specifications anonymous-class


    【解决方案1】:

    因为您正在检查的匿名内部类Modifiers$1 不是final

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

    【讨论】:

    • 这不是我要问的问题。该文件指出,Modifier$1 类不被认为是最终的。想象以下没有字段的声明: new Runnable(){ public void run(){}}.run();行为将完全相同...
    • 你发现匿名内部类根本不是final。为什么不是final 对你很重要?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多