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

Ste*_*han 0 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);
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 15

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

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

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

这个类和T系统之间有什么关系吗?