是否可以从匿名 class 调用多个方法?
Is it possible to call several methods from an 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
}
}
在您的示例中,start()
returns void
是不可能的。但是,取决于您调用的方法的实现。在一些设计中,我们通常设计(Builder pattern/ Fluent)
方法returnsthis
,那么,method chaining
是可能的。对于你的例子,你可以像下面那样做。
Thread t = new Thread() {
public void run() {
}
};
t.setName("Something");
t.start();
不,这是不可能的,因为 start()
和 setName()
returns 线程都不是。创建的匿名class,是Thread
的子class,所以可以赋值给这样一个变量:
Thread thread = new Thread {
// something
};
thread.setName(...);
thread.setPriority(...);
thread.start();
或使用函数符号:
Thread thread = new Thread( () -> { ... } );
thread.setName(...);
thread.setPriority(...);
thread.start();
和我的首选(没有创建额外的 class),使用方法参考:
Thread thread = new Thread(this::runInThread);
thread.setName(...);
thread.setPriority(...);
thread.start();
...
}
private void runInThread() {
// something to run in thread
}
添加setPriority()
只是为了有更多的电话
如果您只想在一条语句中声明、命名和启动线程,只需使用指定线程名称的构造函数:
new Thread("Something") { ... }.start();
我想知道这是否可能以某种方式出现 java 7 或 8
public class App{
public static void main(String[] args) {
new Thread(){
public void run(){
//Something
}
}.start().setName("Something") //Here!!
//Something
}
}
在您的示例中,start()
returns void
是不可能的。但是,取决于您调用的方法的实现。在一些设计中,我们通常设计(Builder pattern/ Fluent)
方法returnsthis
,那么,method chaining
是可能的。对于你的例子,你可以像下面那样做。
Thread t = new Thread() {
public void run() {
}
};
t.setName("Something");
t.start();
不,这是不可能的,因为 start()
和 setName()
returns 线程都不是。创建的匿名class,是Thread
的子class,所以可以赋值给这样一个变量:
Thread thread = new Thread {
// something
};
thread.setName(...);
thread.setPriority(...);
thread.start();
或使用函数符号:
Thread thread = new Thread( () -> { ... } );
thread.setName(...);
thread.setPriority(...);
thread.start();
和我的首选(没有创建额外的 class),使用方法参考:
Thread thread = new Thread(this::runInThread);
thread.setName(...);
thread.setPriority(...);
thread.start();
...
}
private void runInThread() {
// something to run in thread
}
添加setPriority()
只是为了有更多的电话
如果您只想在一条语句中声明、命名和启动线程,只需使用指定线程名称的构造函数:
new Thread("Something") { ... }.start();