我知道使用lambda表达式调用单个arg构造函数的过程。但不确定如何使用其他参数(不是单个arg)调用构造函数。这可以通过使用“How to call a specific parent constructor from anonymous inner class?”中表示的匿名内部类来实现。但我对使用lambda表达式更感兴趣。
例如:为了在Thread类中调用单个arg构造函数,我可以这样做
Thread t1 = new Thread (() -> {
//do sometask
});
但是我找不到类似的方法来调用Thread(String name)构造函数。
基本上我想用lambda
做类似下面的事情Thread t2 = new Thread("Thread2") {
@Override
public void run() {
}
};
感谢您的任何帮助。谢谢。
答案 0 :(得分:2)
我不确定我是否理解这个问题,但是如果你想使用lambda和string构造函数这样的话应该有效:
Thread t2 = new Thread(() -> System.out.println("in "), "Thread2")
因为Thread类中的构造函数如下所示:
public Thread(Runnable target, String name)
因此,第一个参数可以使用lambda表达式(功能接口),第二个参数是线程的名称。
答案 1 :(得分:1)
Thread t1 = new Thread (() -> {
//do sometask
}, "ThreadName");
答案 2 :(得分:1)
你的第二个例子不仅仅是调用构造函数。它定义了Thread
的匿名子类,并调用其构造函数。
Thread t2 = new Thread("Thread2") {
@Override
public void run() {
// do something
}
};
相当于:
class MyThread extends Thread {
@Override
public void run() {
// do something
}
}
Thread t2 = new MyThread("Thread2");
所以这是定义"东西"关于新对象有两种方式:
如果类型是功能接口,则lambda可以用作匿名子类(class
)或实现(interface
),例如{ {1}}:
Callable
但是Callable<Foo> r = () -> doSomething();
不是一个功能界面 - 它没有一个抽象方法 - 所以你不能为Thread
执行此操作。
对于您所拥有的特定情况,Thread
有两个参数构造函数,因此您不需要创建子类。
Thread