【发布时间】:2010-11-14 04:06:54
【问题描述】:
如果我有异构集合,我确切知道要放置的类型,是否有办法强制执行此操作。
例如,假设我有一个地图,它有一个字符串键和值,可以是三种不相关的类型。现在我知道我只会放 ClassA 和 ClassB 或 java.lang.String
例如这里是代码
public HetroCollection
{
public Map<String,Object> values;
}
public ClassA
{
}
public ClassB
{
}
public static void Main(String args[])
{
HetroCollection collection = new HetroCollection();
collection.values.add("first", new ClassA());
collections.values.add("second", new ClassB());
collections.values.add("third" , "someString");
//BAD want to stop random adds
collections.values.("fourth" , new SomeRandomClass());
}
我想到的选项是:
让类实现一个通用接口并在 Map 上使用泛型(问题是如果这还涉及 JDK 或第三方库类,那么更改类不是一种选择
-
隐藏地图并提供参数化的 put 方法
put(String key , ClassA 值); put(String key , ClassB 值); 放(字符串键,字符串值); 获取(字符串键);
重新考虑设计,不要使用异构集合(不知道我会如何表示这一点)
为此寻找最佳实践答案。
【问题讨论】:
-
对不起,不是答案,而是观察:似乎没有什么喜欢异构集合。每次我需要做这样的事情时,我永远不会快乐。在 java 中,您的选择是有限的。我可能会倾向于您的第二个选项 - 基本上隐藏地图 - 有特定的方法来处理它。
标签: java generics collections