簡體   English   中英

語法 <T extends Class<T> &gt;在Java中

[英]The syntax <T extends Class<T>> in Java

關於以下內容我有幾點想法:

public interface MaxStack<T extends Comparable <T>>

1 - 為什么實現MaxStack的類應該像這樣編寫:

public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T>

而不是public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T extends Comparable <T>>

2-為什么這個類的私有變量,當我使用泛型時,應該只用<T>編寫而不用<T extnds Comparable<T>> 例如, private List<T> stack= new ArrayList<T>();

3 - <T extends Comparable<T>><T extends Comparable>之間有什么區別 - 如果我需要比較我班級中的bewteen元素,兩者都可以,不是嗎?

編輯:我認為3的問題是,它可能允許插入以第二種方式定義的列表,以便具有不同的元素,這些元素都可以從可比較的方面擴展,然后當我想比較它們時,它將是不可能的,因為我們無法將String與Integer進行比較,所以都從Comparable擴展。

  1. 在聲明中, maxStackclass<T extends Comparable <T>>你已經在T上表達了界限。 所以你不需要它了。

  2. 原因與上述相同。 無需再次在同一類型參數上指定邊界。

  3. <T extends Comparable<T>>表示T必須實現可比較兩個T實例的Comparable接口。 雖然<T extends Comparable>意味着T實現了Comparable ,因此它可以比較兩個Object 前者更具體。

如果我需要比較班上的各種元素,兩者都可以,不是嗎?

嗯,從技術上講,你可以使用兩者達到相同的效果。 但是對於聲明<T extends Comparable> ,它將涉及不必要的強制轉換,你可以避免使用類型safe <T extends Comparable<T>>

1)類有一個帶有bound的類型參數Textends Comparable <T> ),這個參數傳遞給接口(這里需要相同的綁定)。 傳遞類型參數時,您不能重復它的約束 - 為什么要這樣做?

2)如1),類型參數聲明其綁定,不重復必要。

澄清:

第一個類型參數出現(在接口或類名后面)是它的聲明。 任何以下出現都是一種用法。 你每次使用它時都不會寫一個變量類型聲明,對吧?

“3 - <T extends Comparable<T>><T extends Comparable>之間的區別是什么? - 如果我需要比較我班級中的bewteen元素,兩者都可以,不是嗎?”

不,兩者都不會好的。 假設我有一類Fooimplements Comparable<Bar>但類Foo和酒吧有沒有關系的對方。 然后Foo無法與Foo類型的其他對象進行比較。 <T extends Comparable<T>>會將此作為一個問題。 <T extends Comparable>不會。

<T extends Comparable<? super T>>

這里有更多細節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM