有这样的方法吗?
public <P, T extends List<P>> T getAwesomeList() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
怎么编译没有任何警告?
Set<String> test = getAwesomeList();
Run Code Online (Sandbox Code Playgroud)
我认为这与通用擦除有关,但不确定编译器是怎么回事.这种情况发生在Java 7上,8时你会收到编译错误.
J8上有什么变化让这个不能编译?
更新:
经过仔细检查后,它还可以在Java 8上编译.
根据Java API规范,Collections.reverseOrder的签名为
public static <T> Comparator<T> reverseOrder()
方法说明中给出的示例说它需要用作
Arrays.sort(a, Collections.reverseOrder());
当我们调用该方法时,我们在任何地方都没有指定使用哪种类型(T解析为哪种类型)。
在这种情况下,编译器如何解析T?是否可以根据分配给它的对象的类型来解析返回类型(T)?
顺便说一句,我知道重载的reverseOrder(Comparator<T> c)方法。