Java泛型 - 我在这里做错了什么?

时间:2013-01-14 08:37:33

标签: java generics

谁能告诉我为什么看跌期权给我一个错误?

static HashMap<Class, ? extends BaseSystem> systems;

public <T extends BaseSystem> EntityManager()//constructor
{
    systems=new HashMap<Class, T>();
} 

public static <T extends BaseSystem> void addSystem(Class c, T system)//store a system for later reference
{
    systems.put(c, system);
}

1 个答案:

答案 0 :(得分:15)

最可能的问题是第一种方法中的T和第二种方法中的T不是自动认为相同的。在其他作品中,您有两种不同的类型,它们都扩展了BaseSystem但可能不相关。

你需要在类上定义一次并使用它一致或只使用BaseSystem而不是使用泛型。

BTW:在更基础的层面上,不要混淆静态初始化和实例初始化。如果要在构造函数中设置静态字段,则会出现设计问题。

班级与T系统之间是否有任何关系?