是否可以从匿名类中调用几种方法?

时间:2019-04-20 14:45:36

标签: java anonymous-class

我想知道是否有可能以Java 7或8的方式实现

public class App{
    public static void main(String[] args) {
        new Thread(){
            public void run(){
                //Something
            }
        }.start().setName("Something") //Here!!
        //Something
    }
}

3 个答案:

答案 0 :(得分:0)

在您的示例中,这是不可能的,因为start()返回了void。但是,取决于您要调用的方法的实现。在某些设计中,我们设计的(Builder pattern/ Fluent)方法通常返回this,在这种情况下,method chaining是可能的。对于您的示例,您可以按照以下步骤进行操作。

Thread t = new Thread() {
    public void run() {
    }
};
t.setName("Something");
t.start();

答案 1 :(得分:0)

否,这是不可能的,因为start()setName()都不返回线程。创建的匿名类是Thread的子类,因此可以将其分配给这样的变量:

Thread thread = new Thread {
    // something
};
thread.setName(...);
thread.setPriority(...);
thread.start();

或使用功能符号:

Thread thread = new Thread( () -> { ... } );
thread.setName(...);
thread.setPriority(...);
thread.start();

和我的首选方法(没有创建其他类),使用方法参考:

    Thread thread = new Thread(this::runInThread);
    thread.setName(...);
    thread.setPriority(...);
    thread.start();
    ...
}

private void runInThread() {
    // something to run in thread
}

添加了setPriority(),只是为了打更多电话

答案 2 :(得分:0)

如果只想在单个语句中声明,命名和启动线程,则只需使用指定线程名称的构造函数即可:

new Thread("Something") { ... }.start();