是否可以在Java中爲類型參數指定上限和下限約束?是否可以在Java中爲類型參數指定上限和下限約束?
我發現a conversation in Sun's forum在討論這個問題(仿製藥功能定稿前明顯),但沒有最終的答案。
總之,有沒有有效的語法來做到這一點:
public class MyClass<T extends Number super Integer>
?
是否可以在Java中爲類型參數指定上限和下限約束?是否可以在Java中爲類型參數指定上限和下限約束?
我發現a conversation in Sun's forum在討論這個問題(仿製藥功能定稿前明顯),但沒有最終的答案。
總之,有沒有有效的語法來做到這一點:
public class MyClass<T extends Number super Integer>
?
我不這麼認爲 - 據我可以從語言規範來講,「超級」僅適用於通配符類型放在首位。通配符語法也建議你只能有一個通配符約束,太 - 所以你不能使用這樣的事情之一:
// Invalid
void foo(List<? extends Foo super Bar> list)
即使這兩個都還:
// Valid
void foo(List<? extends Foo> list)
// Valid
void foo(List<? super Bar> list)
由於在評論中指出,它可能有多個上界 - 但僅限於類型參數和轉換表達式。例如:
// Valid
<T extends Number & Comparable> void foo(List<T> list)
注意:您可以指定一個上限通配符,也可以指定一個下限,但你不能同時指定。
謝謝您的回答。我可以建議你添加一條評論,說代碼是無效的,這樣沒有人認爲(錯誤)它是有效的嗎? (例如,如果它出現在搜索引擎結果頁面中) – 2010-03-27 19:32:55
@Hosam:會的。 – 2010-03-27 19:34:45
要清楚,你*可以*有多個上限,例如'List <?擴展Number&Comparable>'。 – NateS 2017-07-20 01:09:10