这段代码为什么要编译?(java通用方法)
以下代码:这段代码为什么要编译?(java通用方法),java,wildcard,generic-method,Java,Wildcard,Generic Method,以下代码: import java.util.*; public final class JavaTest { public static <T extends Comparable<? super T>> int max(List<? extends T> list, int begin, int end) { return 5; } public static void main(String[] args) {
import java.util.*;
public final class JavaTest {
public static <T extends Comparable<? super T>> int max(List<? extends T> list, int begin, int end) {
return 5;
}
public static void main(String[] args) {
List<scruby<Integer>> List = new ArrayList<>();
JavaTest.<scruby>max(List, 0, 0); //how does this compile?, scruby doesn't meet
//T extends Comparable<? super T>
}
}
class scruby<T> implements Comparable<String>{
public int compareTo(String o) {
return 0;
}
}
import java.util.*;
公共期末考试{
公共静电
或者让Java来推断:
JavaTest.max(List, 0, 0);
看不出有人投票否决这个问题有什么意义吗?至少对我来说,这似乎是一个合法的问题。不,它不扩展String
它扩展Integer
,因为List List List=new arrarylist();
然后它没有使用您的implements compariable
方法,它使用的是从Integer继承的方法,对不起,我的意思是它实现compariable,string不是scruby的super。它是如何从Integer继承任何东西的?哦,因为它是原始类型,所以它只是不检查?O.O很有趣,谢谢您的帮助lp!是的。基本上,只要引入原始类型,与之相关的所有泛型类型检查都将被抑制,除了警告,检查将降级到运行时,就像在泛型出现之前的日子一样。请记住,Java希望原始类型的使用仅限于旧的遗留代码。
JavaTest.<scruby>max(List, 0, 0);
JavaTest.<scruby<Integer>>max(List, 0, 0);
JavaTest.max(List, 0, 0);