【发布时间】:2017-12-11 09:53:04
【问题描述】:
我正在玩 Java 实用程序函数。我有以下代码:
public class Checker<T>{
private T value;
private Function<T, T> callback;
private Checker(T value) {
this.value = value;
}
public static Checker when(String o) {
return new Checker<String>(o);
}
public static Checker when(int o) {
return new Checker<Integer>(o);
}
public Checker then(Function<T, T> callback) {
this.callback = callback;
return this;
}
public void execute() {
if (this.value instanceof String) {
this.callback.apply("123");
}
if (this.value instanceof Integer) {
this.callback.apply(123);
}
}
Checker.when("123").then(str -> {
return "";
}).execute();
Checker.when(123).then(str -> {
return "";
}).execute();
现在我收到this.callback.apply("123") 的错误,因为它需要T 并且不能将其转换为String。
Function<T,T> 是否可以有通用返回类型?我可以发送T,但随后它在我的 lambda 中以Object 的形式接收,但我想要String 或Integer。
【问题讨论】:
-
为什么你需要做这个
instanceof链,而不是简单的this.callback.apply(value)?为什么要专门传入123?为什么不直接将value设为123的兼容实例? -
请修正你的缩进。
标签: java function lambda java-8