Java 使用JDK 1.8时泛型类型的引用不明确
我知道以前有人问过这个问题的变体,我认为我理解Java 8类型解析系统,但是我得到了一个模糊的引用错误,我真的认为不应该是模糊的:Java 使用JDK 1.8时泛型类型的引用不明确,java,generics,Java,Generics,我知道以前有人问过这个问题的变体,我认为我理解Java 8类型解析系统,但是我得到了一个模糊的引用错误,我真的认为不应该是模糊的: import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; interface Function <T, E> {} public class MyFns { public static <E
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
interface Function <T, E> {}
public class MyFns {
public static <E, T> Collection<E> map(Function<? super T, E> fn, Collection<T> coll) {
return new ArrayList<>();
}
public static <E, T> List<E> map(Function<? super T, ? extends E> fn, List<T> coll) {
return new ArrayList<>();
}
public static <E, T> List<E> map(Function<? super T, ? extends E> fn, T[] coll) {
return map(fn, Arrays.asList(coll));
}
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collection;
导入java.util.List;
接口函数{}
公共类MyFns{
publicstaticcollectionmap(函数我从一篇评论中提到了这一点,因为我想更好地解释它
我敢肯定,这与以下非通用示例类似:
static void m(Double a, Object b) {}
static void m(Object a, String b) {}
static {
m(1.0, ""); // compiler error
}
也就是说,Function在第一个map
中更改fn
的类型从Function重载它可能不能完全解释观察结果,但可能是这里的关键点:FunctionString
可能不是最好的示例,因为它是最终的。@Hulk在示例中它并不重要。
Error:(18, 15) java: incompatible types: java.util.Collection<capture#1 of ? extends E> cannot be converted to java.util.List<E>
public static <E, T> List<E> map(Function<? super T, ? extends E> fn, T[] coll) {
return MyFns.<E,T>map(fn, Arrays.asList(coll));
}
static void m(Double a, Object b) {}
static void m(Object a, String b) {}
static {
m(1.0, ""); // compiler error
}