抽象类的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让您使用Runnablelambda而不是子类化的方式:

Thread t = new Thread(() -> System.out.println("Hello World"));

t.start();

以上是 抽象类的Lambda表达式 的全部内容, 来源链接: utcz.com/qa/418830.html

回到顶部