Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这段代码为最终修饰符生成false?_Java_Reflection_Final_Specifications_Anonymous Class - Fatal编程技术网

Java 为什么这段代码为最终修饰符生成false?

Java 为什么这段代码为最终修饰符生成false?,java,reflection,final,specifications,anonymous-class,Java,Reflection,Final,Specifications,Anonymous Class,这是一个相当理论化的问题,但也许你知道的规范很深,可以让你回答。。。如果匿名类是final,为什么这段代码会产生false?实际上,该类可以被视为最终类(如果没有字节码操作,就无法扩展它): 因为您正在检查的匿名内部类,Modifiers$1,不是final 变量r是final,但这并不意味着类本身是final,因为您正在检查的匿名内部类,Modifiers$1,不是final 变量r是final,但这并不意味着类本身是final,这不是我要问的问题。该文件注意到,类别修改器$1不被视为最终版本

这是一个相当理论化的问题,但也许你知道的规范很深,可以让你回答。。。如果匿名类是final,为什么这段代码会产生false?实际上,该类可以被视为最终类(如果没有字节码操作,就无法扩展它):


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


变量
r
final
,但这并不意味着类本身是
final
,因为您正在检查的匿名内部类,
Modifiers$1
,不是
final


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

,这不是我要问的问题。该文件注意到,类别修改器$1不被视为最终版本。假设以下声明没有字段:new Runnable(){public void run(){}}.run();行为将完全相同…因为您发现匿名内部类根本不是
final
。为什么它不是
最终版
?这不是我要问的问题。该文件注意到,类别修改器$1不被视为最终版本。假设以下声明没有字段:new Runnable(){public void run(){}}.run();行为将完全相同…因为您发现匿名内部类根本不是
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()));
    }
}