2012-09-29 17 views
2

編寫名爲MyType的泛型類的標頭。該類應該有 有兩個類型參數。第一個類型參數的上限 應該是Number類。第二個類型參數的上限 應該是String類。類有兩個類型參數都有一個字符串和數字的上限:Java

會看起來像這樣正確嗎?

public class MyType<T extends Number> {} 

我該如何去獲得第二個類型參數作爲上限?我可以只擴展Number extends String嗎?

回答

3

聲明是這樣

public class TestThis <T extends Number, X extends String> {} 

x延伸字符串作品,請記住,String是一個final類,你不能對它進行擴展。 Eclipse給了我這個警告:

類型參數X不應該被最終類型String限制。最終類型不能進一步擴展

1

您誤解了問題:它要求您爲類提供兩個類型參數,每個參數都帶有一個邊界,而不是一個帶有兩個邊界的類型參數。

例如這個類有兩個類型參數TU

public class MyType<T, U> { } 

我把它留給你 其他答案添加的範圍。


編輯:請注意,如果你想在單一類型參數的多個上限,您可以使用&分隔它們:

<T extends B1 & B2 & B3> 

但由於Java沒有多重繼承,附加上限只能是接口。這裏,B1可以是類或接口,而B2B3必須是接口(參考:Java Tutorials)。

1

我該如何去獲取第二個類型參數作爲上限?我可以只擴展Number extends String嗎?

您可以通過添加像,分開的第二個參數:

public class MyType<T extends Number, S extends String> { 
} 

雖然它看起來奇怪,因爲String是一個final類,但你仍然可以擴展它的上限。

聲明看起來像:

MyType<Long,String> myType = new MyType<Long, String>(); 
+0

在這種情況下,'S擴展String'與'String'有什麼不同? –

+0

不是。從技術上講,我寧願'String'而不是'S extends String' – SiB

1

如果A上限的B,這意味着A extends B。因此,您的聲明應該是這樣的:

public class MyType<T extends Number, U extends String> { 
    ... 
} 

你被要求有兩種類型參數(不只是一個如您目前擁有),因此TU以上。 但我應該注意:Stringfinal,因此沒有類型U可以是String的擴展(儘管U仍然可以是String)。

相關問題