Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDK 1.8时泛型类型的引用不明确_Java_Generics - Fatal编程技术网

Java 使用JDK 1.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

我知道以前有人问过这个问题的变体,我认为我理解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, 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重载它可能不能完全解释观察结果,但可能是这里的关键点:
Function
String
可能不是最好的示例,因为它是最终的。@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
}