英文:
Why java cannot reconcile the `?` generic type from different sources
问题
我有一个(据我理解)针对特定领域的单子(Monad),它充当了Either/Try的组合和用于REST终端点调用的操作。这是一个带有单一类型泛型参数的类,用于其包含的值。因为某些函数仅用于副作用而不关心返回值,我通常将它们的返回值简单地注释为MyMonadThing<?>
。然而,这种模式在尝试在某些地方分叉逻辑时会引发问题。我不会展示单子类,但是这里有一个使用列表的示例,说明了问题:
public static void main(String[] args) {
map(Arrays.asList(1, 2, 3), t -> {
return t == 2? foo() : bar();
});
}
static <T, NewT> List<NewT> map(List<T> lst, Function<T, List<NewT>> fn) {
return lst.stream().flatMap(t -> fn.apply(t).stream()).collect(Collectors.toList());
}
static List<?> foo() {
return Arrays.asList("foo");
}
static List<?> bar() {
return Arrays.asList("bar");
}
这不会编译,因为三元运算符。出现以下错误:
- 类型不匹配:无法从List<capture#2-of ?>转换为List
评论