java - 如何使用返回void的功能接口?
问题描述
我有这个结构:
if (Objects.isNull(user.getMartialStatus())) {
user.setMartialStatus(MartialStatus.MARRIED);
}
我有很多,我想使用功能接口优化代码。好的。我写这样的东西:
public static <T> void processIfNull(T o, Supplier<Void> s) {
if (Objects.isNull(o)) {
s.get();
}
}
然后,我等待这段代码可以工作:
processIfNull(user.getMartialStatus(), () -> user.setMartialStatus(MartialStatus.MARRIED));
但IDEA写道:
void 与 void 不兼容
请告诉我应该怎么做。
解决方案
正如错误所解释的那样Void
,是一个不等同于void
. Supplier<Void>
期望返回Void
就像Supplier<String>
期望String
对象返回一样。
所以你的功能界面应该如下所示。
它有一个void apply()
匹配的签名() -> ...
@FunctionalInterface
public interface ActionIfNotNull {
void apply();
}
但是,当您搜索内置功能接口时,您可以Runnable
按照 Jon Skeet 的建议提出。
解决方案
public static <T> void processIfNull(T o, Runnable s) { // instead of you Runnable can use your own functional interface like ActionIfNotNull
if (Objects.isNull(o)) {
s.run();
}
}