这段代码的含义是什么?

7
下面这个匿名类中的第二个代码块run()是什么意思?这个匿名类没有任何标识符或声明在它之前。
        public BackgroundThread(final Runnable runnable)
        {
            super(new Runnable() {

                final Runnable val$runnable;

                public void run()
                {
                    Process.setThreadPriority(10);
                    runnable.run();
                }


                {
                    runnable = runnable1;
                    super();
                }
            });
        }

编辑:是的,这是反编译的代码。

2个回答

14

这是一个 实例初始化器 - 作为构造函数的一部分被调用。在匿名内部类中,无法显式声明构造函数,因此有时会使用实例初始化器。在这种情况下,这样做就没有意义,因为run方法可以直接使用runnable - 它仍将在相同时间捕获。

(实际上,这段代码看起来不完整或无效——因为实例初始化器提到了runnable1,但在其他任何地方都没有出现。我也不会期望实例初始化器包括super()调用。这可能是反编译的代码吗?)


据我所知,您不能在实例初始化程序中调用super(),因此上面显示的代码无法编译。它看起来确实像是反编译的代码。 - Jesper

2

这是一个初始化块,会被编译进每个构造函数中。

请参见教程中的“初始化实例成员”部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接