gpt4 book ai didi

java - 抽象类的 Lambda 表达式

转载 作者:IT老高 更新时间:2023-10-28 20:56:55 24 4
gpt4 key购买 nike

我有一个带有一个抽象方法的抽象类。如何使用 lambda 表达式来实例化它。它不能做成接口(interface),因为它扩展了一个类。

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.Functionjava 中的适当接口(interface)。 util.function 包而不是 java.util.function.Supplier


这也是 java.lang.Thread 让您使用 Runnable lambda 而不必继承类的方式:

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

关于java - 抽象类的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com