抽象类的Lambda表达式
我有一个带有一个抽象方法的抽象类。如何使用lambda表达式实例化它。因为它扩展了一个类,所以不能将其制成接口。
public class Concrete<T> { // Has a bunch of predefined methods.
}
public abstract class Abstract<T> extends Concrete<T> {
public T getSomething();
// Uses inherited methods from Concrete class
}
public class Driver {
public static void main(String[] args) {
System.out.println(new Abstract<String>() {
public String getSomething() {
// Returns something using inherited methods from Abstract
// Class and Concrete Class
}
});
}
}
回答:
正如Sleiman Jneidi在回答中指出的那样,您不能直接使lambda表达式目标成为抽象类。但是,您可以使用一种解决方法:
public class AbstractLambda<T> extends Abstract<T>{
private final Supplier<? extends T> supplier;
public AbstractLambda(Supplier<? extends T> supplier)
{
this.supplier = supplier;
}
@Override
public T getSomething()
{
return this.supplier.get();
}
}
可以与lambda表达式一起使用:
Abstract<String> a = new AbstractLambda<>(() -> "Hello World");System.out.println(a.getSomething()); // prints 'Hello World'
如果您的getSomething(...)
方法有参数,请使用包中的java.util.function.Function
或适当的接口java.util.function
代替java.util.function.Supplier
。
这也是java.lang.Thread
让您使用Runnable
lambda而不是子类化的方式:
Thread t = new Thread(() -> System.out.println("Hello World"));t.start();
以上是 抽象类的Lambda表达式 的全部内容, 来源链接: utcz.com/qa/418830.html