在不知道具体类型的情况下实例化对象

时间:2014-05-20 13:04:25

标签: java generics design-patterns

我正在创建以下java类。

class EntityCollection <E extends Entity, M extends Hashmap<?,E>> {
}

这个想法是这个类的用户会告诉我要在集合和实际存储中保存什么类型的对象。所以M可以是简单的Hashmap或LinkedHashmap。

我在这里有两个问题: 我如何在课堂上实例化M?有可能吗?

AND

这是一个很好的方法还是我应该使用一些StoreFactory来回复我使用的商店?我应该在这个类的构造函数中使用它吗?

2 个答案:

答案 0 :(得分:1)

由于类型擦除,您无法按照设置的方式执行此操作。你可以让他们把课程交给你。

请阅读:

Create instance of generic type in Java?

答案 1 :(得分:1)

创建hashmap非常简单,只需传递泛型类型 - 或者甚至使用菱形表示法并为您完成。

M m = new HashMap<>();

复杂的是,您还希望能够选择地图的类型。这可以通过多种方式完成:

  • 您可以使用工厂模式并传入按需创建地图的工厂对象。

  • 您可以在类外生成Map并将其传递给构造函数。

  • 有一个抽象方法来创建地图。在创建类的实例时,人们将实现该抽象方法并为其生成地图。

对于第二个问题,如果没有更多关于你正在做的事情的细节,就没有办法知道。这是一个架构决策,很可能不适合堆栈溢出Q&amp;答:这一切看起来有点乱,你暴露了很多类的内部行为。你可能会更好地考虑你想要的行为以及提供它的界面,而不是实现的细节。

例如,您可以拥有enum { UNSORTED, INSERTION_ORDER, etc },然后根据该枚举实例化正确的地图。