【发布时间】:2016-12-02 15:18:14
【问题描述】:
我现在有
class A {...}
interface B {...}
我想要的是一些等价的
HashMap<String, A implements B>
即,String 映射到任何实现 B 的 A 实例。但是该语法无法编译。有没有办法映射到实现接口的类?另请注意,A 不是通用的,所以我不能做类似的事情
A<? implements B>
【问题讨论】:
-
你的意思是任何实现
B的A的子类? -
这闻起来像代码味道。你确定你的类层次设计是正确的吗?
-
@NicolasFilotto 完全正确
-
@biziclop 你能确定吗:)。但说真的,这似乎是一个正常的用例。如果我可以声明一个实现接口的子类,为什么我不能映射到其中之一?
-
你可以只映射到接口而不用担心它是什么类。如果你必须同时担心这两个问题,那么肯定会发生一些奇怪的事情。 (就像在
TreeSet中一样,合同让事情变得很尴尬,您要么需要Comparable的元素,要么提供Comparator。)或者,您可以创建扩展B的接口C,并且还包含从A获取您需要的所有方法,并使A的子类实现C而不是B。
标签: java generics hashmap wildcard