列出我想要一个Map
几个名单,他们每个人Comparable
对象组成的,但并不总是相同的,所以有可能是一个Doubles
和List
的Strings
一个List
,等...通用地图与可比
Map<String, List<Comparable<?>>>
不幸的是,Map
如上所定义,因为在每个List
元件不能相比不会是有用的。因此,我不得不欺骗和引入类型参数到类:
class MyClass<T extends Comparable<? super T>> {
Map<String, List<T>> myMap;
}
这并不完全正确,因为不是所有的列表是相同类型的。但它是有效的,我必须做的唯一事情就是当我将Double
添加到双列表或String
到字符串列表中时,将类型转换为T
。我确保每种类型都只添加到正确类型的列表中。
有没有更好的方法来解决这个问题?
另一种方法是对每种类型的List
都有一个Map
。但是这只会使代码更丑,我只能对列表进行排序并将它们作为字符串值插入到数据库中,因此我只能在可比较对象上调用toString
。
您可以使用['checkedList'](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#checkedList-java.util.List- java.lang.Class-)来减少错误的风险。 – shmosel
由于您无法静态地告诉Java编译器“List”中元素的类型,您甚至不能确保其中一个列表中的元素可以相互比较。总之,你应该不这样做,或者接受你绕过静态类型检查,例如通过声明它为'Map>',使用原始泛型类型'Comparable'。然后接受编译器警告,告诉您您正在绕过静态类型检查。 –
Andreas
@shmosel哇,我怎么从来没有听说过这个?谢谢:) – Roland