2015-07-01 24 views
0

是否可以使用相同的add方法將各種類型的數據添加到地圖或集合中,具體取決於傳入的內容?例如...Java地圖和集合使用相同的添加方法

public static <U, T> void add(T _token, U<T> set> 
{ 
    ... 
} 

在哪裏可能的字符串或雙是_token參數以及一個地圖,地圖或設置或設置在設定可變。我知道地圖接受put方法的兩個值,但我暫時忽略了這個...

任何人都可以告訴我如何實現這種模板pleasEe?

在此先感謝!

+3

那麼,你不能忽視它。如果它是地圖,那麼其他價值是多少? – m0skit0

+0

如何在地圖中插入令牌? 'map.put(token,token)'? – assylias

+0

我想將它連接成一個字符串或者東西,把它傳遞給add方法,然後在add方法中分割它。也許。我還沒有完全想過它 – CrazyDogLady

回答

2

恕我直言,這聽起來像一個糟糕的設計。在決定使用這種方法之前,你應該更深入地思考你的設計。一張地圖和一套地圖是非常不同的東西,通常它們不會用於同一件事情。這是更好地重載方法來代替,例如:

public static <T> void add(final T token, final Map<Whatever, T> holder) 
public static <T> void add(final T token, final Set<T> holder) 

仍然使用多態和泛型可能是如下一個解決辦法:

public static <T> void add(final T token, final Object holder) { 
    if (holder instanceof Map) { 
     final Map map = (Map) holder; 
     map.put(KEY, token); // Or whatever you want to do in this case 
    } else if (holder instanceof Set) { 
     final Set set = (Set) holder; 
     set.add(token); 
    } else { 
     throw new IllegalArgumentException("Holder is nor a Map neither a Set"); 
    } 
} 

注意,這是不加以控制,也就是Map可能是<String, String>,你通過Integer

我絕對更喜歡重載解決方案的方法。

+0

超載完全滑倒我的腦海。更好的主意,謝謝! – CrazyDogLady

2

集合和地圖有不同的「添加」約束,所以即使你說你想忽略它,你也會忽略它們之間的本質區別:向一個集合添加一個對象只需要對象就可以完成,但是向地圖添加對象需要關聯的鍵。

您可以利用多態性並定義兩個add方法,一個用於集合,另一個用於映射。然而,這些集合已經定義了這樣的行爲,這似乎毫無意義。

+0

這是方法重載,而不是多態。 – m0skit0

+0

a.k.a Ad Hoc多態性,有多種形式的多態性 – aconkey

+0

我從來沒有聽說過這個詞,謝謝! – m0skit0

相關問題