【发布时间】:2016-01-07 11:25:57
【问题描述】:
在 Java 中实现策略模式时,存在将输入数据类型映射到特定算法实例的常见问题。
例如,我们可以创建一个地图:
map.put(Apple.class, new AppleHandler());
map.put(Orange.class, new OrangeHandler());
并在运行时为给定的数据类型解析正确的处理程序:
Apple a = new Apple();
map.get(a.getClass()).handle(a);
问题:Guava/Apache Commons 等库中是否有任何Map<Class<A>, B> 实现可以处理多态类型?
例如上面的映射会像这样工作(假设 GreenApple 扩展了 Apple):
map.get(Apple.class) == map.get(GreenApple.class);
我知道我可以编写遍历层次结构的实现,但我问的是 OTS 解决方案。
【问题讨论】:
-
Guava 有
ClassToInstanceMap,但这固定了值类型(到键的实例)。我有一个实现 here 但请注意,当解析类型时存在歧义时,这个实现会发出嘶哑的声音。由于接口本质上具有多重继承,因此获取最具体的类型并不总是可能的。 -
感谢您的要点 - 我正在使用类似的实现(我认为在模棱两可的情况下运行时异常是可以接受的)。我只是认为这是一个很常见的问题,并且有一些“官方”解决方案。
-
“OTS 解决方案”是什么意思?
-
@mfulton26 Off-The-Shelf - 意思是“现有的、随时可用的解决方案”,就像一个公开可用的库。
-
我认为目前的共识是不,没有现成的。 (当然不是番石榴。)
标签: java dictionary polymorphism guava strategy-pattern