簡體   English   中英

為什么我不能使用map.entry <k,v> 作為小節標題中的類型,但可以以可變的小數位數

[英]why i can not use map.entry<k,v> as a type in a clase heading, but can in a variable declacration

我試圖編寫一個樹形圖類,但遇到了一些問題,其中之一是泛型。 如果java.util.Map.Entry是一種類型,可以在實例聲明中使用,為什么不能在類標題中使用它?

為什么泛型為此工作:

 public class test5 <K extends Comparable<K>,V>{

     TreeSet <java.util.Map.Entry<K,V>> treeBack;

 }

而不是這樣:

 public class test5 <java.util.Map.Entry<K,V>>{

 }

我想你的意思是:

 public class MyTest<K,V extends java.util.Map.Entry<K,V>> {

 }

您是否正在嘗試將Map.Entry擴展到某個地方? 並想以這種方式定義您的課程? 您使用類模板來泛化您的類。

例如

class GenericTreeMap<M extends Map.Entry> {
  TreeSet<M> treeBack;
}

然后,您可以執行類似GTM<CustomEntry> treeMap ,如果您只想能夠在樹圖實現中使用Map.Entry,則甚至不需要創建模板。

class GenericTreeMap {
   TreeSet<Map.Entry> treeBack;
} 

在您的后一種情況下,我認為您的意思是這樣的:

public class test5 <K, V, E extends java.util.Map.Entry<K,V>>{
    TreeSet<E> treeBack;
}

泛型就像聽起來一樣,是泛型的。 您的泛型變量不能是類本身,因為它違反了泛型的固有屬性:未指定該類。

但是,您可以創建一個擴展類的泛型變量,這實質上意味着您的泛型參數可以是擴展該泛型參數中定義的類的任何類。

有什么變化? 只是KV Map.Entry與什么都有關系。 那這樣的東西呢? 然后,您可以參數化Map.Entry

class Test<K,V>{
    TreeSet <java.util.Map.Entry<K,V>> treeBack;
}

在這種情況下, KV是參數化類型。 也許您想讓Test擴展Map.Entry?

class Test<K, V> extends Map.Entry<K, V>

現在測試本身就是一個Map條目。

僅僅是因為它不是有效的類型變量聲明。

類型變量聲明必須采用以下形式

Identifier
Identifier extends ClassOrInterface
Identifier extends AnotherTypeVariable

等等(它們也可以帶有注釋以及其他位和波波)

但關鍵是它們必須以標識符開頭。 Java標識符不能包含句點,尖括號等。

所以

class Foo<java>

會沒事的(如果不明智的話),但是

class Foo<java.util>

將無法正常工作。

暫無
暫無

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

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