2010-08-23 50 views
0

的一鍵設置我有一個方法 -鑄造和檢索地圖

private void mapSomething(Class<?> dataType){ 

    if(dataType.isInstance(Map.class)){ 
     // How do I get the key set of the map 
    } 
} 

方法被稱爲喜歡 -

mapSomething(someHashMap.getClass()); // Hash Map 

我如何在方法內部地圖的按鍵?

回答

1

您可以將其轉換爲Map並檢索密鑰集。如果你願意,你也可以添加無界的通用參數<?>到地圖並設置。

但是你只傳入數據類型的類。您還需要傳入實際的實例。例如。

mapSomething(someHashMap.getClass(), someHashMap) 

和實現變爲:

void mapSomething(Class<?> dataType, Object instance) 
    { 
     if(dataType.isInstance(Map.class)){ 
      Map<?,?> map = (Map<?,?>)instance; 
      Set<?> keySet = map.keySet(); 
     } 
    } 

Altenatively,你可以只通過實例,而不是類

void mapSomething(Object instance) 
    { 
     if(instance instanceof Map){ 
      Map<?,?> map = (Map<?,?>)instance; 
      Set<?> keySet = map.keySet(); 
     } 
    } 
+0

但是有一個正在傳遞的地圖聲明。我們不能使用dataType的名稱(getName)來使用地圖嗎? – 2010-08-23 19:00:56

+0

'getName'只返回它應該的類名。沒有辦法回到實例,一旦你通過一個類。 – whiskeysierra 2010-08-23 22:07:32

4

你沒有真正傳遞地圖的實例(只是它的類數據)。如果您可以將您的方法簽名更改爲類似這樣的內容,則很容易:

private void mapSomething(Object data){ 
    if(data instanceof Map){ 
     ((Map)data).keySet() 
    } 
}