2015-07-01 25 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

相关问题