下面的代碼:爲什麼這個代碼編譯? (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