我有两门课, Stock
及 Crypto
. 两者都是 Security
,这是他们获得下面调用的方法的地方。我想要一个通用方法,它接受其中一个,并向相应的hashmap添加或更新。比如:
1 class Portfolio {
2 private HashMap<String, Stock> stocks;
3 private HashMap<String, Crypto> cryptos;
4
5 public void add(Security s) {
6 HashMap<String, ? extends Security> table;
7 if (s instanceof Stock)
8 table = stocks;
9 else if (s instanceof Crypto)
10 table = cryptos;
11 else
12 return;
13 if (table.containsKey(s.toString()))
14 table.get(s.toString()).addShares(s.getShares(), s.getAvgPrice());
15 else
16 table.put(s.toString(), s); //ERROR
17 totalEquity += s.getAvgPrice() * s.getShares();
18 }
19 }
我知道像这样的通配符hashmap中只能放null。我尝试了通配符文档中描述的helper方法解决方法,但仍然出现错误。我想找到一个解决方案,不需要为这两个子类重复第13-17行,因为这里需要的唯一方法是由超类实现的。
1条答案
按热度按时间kpbwa7wx1#
鉴于以上信息,我认为您可以做的最简单的事情是添加两个公共方法(一个)
Stock
再来一次Crypto
)只需将正确的Map分派到通用私有add
推断子类型的方法:通过以上操作,您将能够执行以下操作:
编译器将分派到右侧
public
方法,只需选择正确的Map并将其传递给泛化private
add方法,该方法处理T extends Security
.