【发布时间】:2017-03-15 17:14:21
【问题描述】:
我正在尝试为我的新 Map 类定义一个方法 putIfGreaterThan()(仅当新值大于旧值时,它才会用新值替换旧值 em>)。
我知道我可以通过组合(通过在新类中使用private final Map<String, Double> map;,然后将Map 传递给构造函数)或通过在我的新类中实现Map 接口并传递Map 来完成此操作到构造函数(虽然我不确定哪种方法更好)。
我的主要问题是我需要能够在 <String, Double> 和 <String, Integer> 上调用方法 putIfGreaterThan() 但不能在 <String, String> 上调用(因为在 <String, String> 上调用它没有意义) .如果我使用泛型 (<K, V>),客户端可以传递一个不允许的 <String, String>。另一方面,如果我允许Double,我将无法通过Integer,反之亦然。如何定义允许 Integer 或 Double 但不允许 String 的方法?
注意:我无法定义两个构造函数(一个用于 Double,一个用于 Integer),因为我收到错误消息:擦除方法 XX 与类型 XX 中的另一种方法相同。
【问题讨论】:
-
你可以用
? extends Number或类似的东西做一些事情;我会投票给回答者。现在要修复错误,所以不能处理这个问题。 -
你不能使用
Number,因为Double和Integer是从Number扩展而来的吗?
标签: java generics parameters hashmap