下面的代码:为什么这个代码编译? (Java的泛型方法)
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;
}
}
如何声明JavaTest.max(列表,0,0)编译?如何scruby满足
T extends Comparable <? super T>
它实现Comparable<String>
这是不是一个超级型scruby的?如果将其更改为scruby<Integer>
,它将不会编译并发出错误。那么为什么现在编译?为什么原始类型编译?
不能看到有人downvoting这点?至少对我来说,这似乎是合法的问题。 –
不,它没有扩展'String'它扩展'Integer'因为'List> List = new ArrayList <>();'然后它没有使用它的'implements Comparable '它使用的方法是[ compareTo](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#compareTo(java.lang.Integer))继承自'Integer'的方法 –
chancea
对不起,我的意思是它实现可比较的和字符串不是scruby的超级用户。它如何从Integer继承任何东西? –
nhooyr