2016-12-02 61 views
5

我现在有地图类实现了接口

class A {...} 
interface B {...} 

我想有是

HashMap<String, A implements B> 

即一些等价的,即一个String映射到的A任何情况下实现B 。但是该语法不能编译。有没有办法映射到实现接口的类?还需要注意的是A不是通用的,所以我不能做这样的事情

A<? implements B> 
+0

你的意思是'A'的任何子类实现'B'? –

+0

闻起来像一种代码味道。你确定你的班级设计是正确的吗? – biziclop

+0

@NicolasFilotto究竟是 – Sherz

回答

5

有可能在一个通用的背景下进行,例如,在一个通用的方法:

public <T extends A & B> void method() { 
    Map<String, T> map = new HashMap<>(); 
} 

不幸,我们不能将这些多重限制应用于通配符。

+0

看起来很有趣,但我在一个已经有返回值的方法中声明了这个Map,所以我无法从签名中获得这个参数化。从技术上讲,我可能会将其重构为一个奇怪的getHashMap()方法,该方法仅基于签名返回参数化映射,但这看起来很诡异。 – Sherz

+0

@Sherz,这里的返回类型并不重要,该方法可以像'this一样调用。 method()'其中'C'是'class C extends A implements B' – Andrew

相关问题