【发布时间】:2019-05-30 00:22:11
【问题描述】:
如何将 lambda 替换为接口方法中的方法引用?
public abstract interface Job
{
public abstract String empName();
public void JobWithDesc(String title)
{
setJobValueDesc(title, empName());
}
}
public final class JobClient {
private static final Job job;
static {
job = () -> ListJob.getName;
}
public static final Job getJob() {
return job;
}
}
想用引用替换这个 (job = () -> ListJob.getName;) lambda。请帮我解决这个问题
【问题讨论】:
-
您的代码无法编译,不,您不能在不创建另一个方法的情况下将
() -> "EmpApplication"转换为方法引用。你可以创建一个这样的方法private static String getApplication() { return "EmpApplication"; }然后你可以做job = JobClient::getApplication; -
您的
abstract interface没有意义。接口本质上是抽象的,只有使用default关键字才能提供方法实现。 -
ListJob是什么ListJob::getName? -
@Aomine 其实可以参考
intern或toString来实现 -
@Aomine String::toString 返回相同的字符串。所以你真的不需要创建自己的。