2011-05-24 33 views
1

你好,我想了解這個方法的簽名:任何人都可以解釋這種方法簽名? <K>和K ...代表什麼?

public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys) 

對於下面的代碼塊:

public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys) { 
    MultigetSliceQuery<K, String, String> q = createMultigetSliceQuery(keyspace, keySerializer, serializer, serializer); 
    q.setColumnFamily(CF_NAME); 
    q.setKeys(keys); 
    q.setColumnNames(COLUMN_NAME); 

    QueryResult<Rows<K, String, String>> r = q.execute(); 
    Rows<K, String, String> rows = r.get(); 
    Map<K, String> ret = new HashMap<K, String>(keys.length); 
    for (K k : keys) { 
     HColumn<String, String> c = rows.getByKey(k).getColumnSlice().getColumnByName(COLUMN_NAME); 
     if (c != null && c.getValue() != null) { 
      ret.put(k, c.getValue()); 
     } 
    } 
    return ret; 
} 

我不知道什麼<K>在方法聲明中表示,或想什麼K...意思是說。任何人都可以闡明這些嗎?

回答

3

Ktype parameter of this method。它可以是任何你想要的。例如。 Integer。在這種情況下,您需要視覺(在您的想法中)用Integer替代方法簽名中的所有K,以瞭解其拍攝和返回的內容。與Integer作爲K,該方法然後將表現爲如下:

public Map<Integer, String> getMulti(Serializer<Integer> keySerializer, Integer... keys) 

...又是varargs語法。它允許您將零個以上的參數或給定類型的數組傳遞給方法。例如。

getMulti(serializer); 
getMulti(serializer, k1); 
getMulti(serializer, k1, k2, k3); 
0

ķ簡單地表示泛型的存在 - 這方法在一個通用類K.它需要一個串行器上的通用類K和的K型的參數的變量數組操作操作,並且它返回一個地圖,其將K的實例映射到字符串。

2

K是一個通用類型。 <K>只是聲明該聲明將討論某種稱爲K的泛型。此處編碼器可以對K聲明限制,如<K extends List>,或不。

然後K被簡單地用作佔位符,一個泛型類型。例如,如果您使用Serializer<String>進行調用,則可以想象在整個方法中將調用方法,就好像K被替換爲String類型。

這就是關於K的所有事情。

如果您需要英文方法簽名的解釋:需要操作K s的Serializer,以及零個或多個K s。它返回從K s到String s的映射。

+0

如果我正在編寫一個需要一個鍵作爲參數傳遞的方法,並且我確切知道該鍵是什麼類的引用,是否需要使用'K'作爲佔位符?例如。 '私人布爾capReached(K鍵)'與'私人布爾capReached(整數鍵)'。在我的情況下,我使用這種方法來限制一個LinkedHashMap的大小。 – Ungeheuer 2016-07-25 18:20:16

0

K這裏代表'鑰匙'。

通用映射聲明通常具有簽名Map<K,V>,其中K代表任意鍵類型,V代表任意值類型。

在您的情況下,值類型的有界範圍爲String

相關問題