Java泛型可以';t将通配符与泛型t一起使用

Java泛型可以';t将通配符与泛型t一起使用,java,generics,inheritance,Java,Generics,Inheritance,我有以下小界面: public interface EntityController<T> { public void update( float elapsed, T applyTo ); } 为什么不可能呢?简单地说,不能为通配符类型赋值,因为实际类型未知。因此,如果返回类型为EntityController,则不能将其分配给update的第二个参数 最简单(但不是100%类型安全)的解决方案是 private Map<Class<? extends Gam

我有以下小界面:

public interface EntityController<T> {
    public void update( float elapsed, T applyTo );
}

为什么不可能呢?

简单地说,不能为通配符类型赋值,因为实际类型未知。因此,如果返回类型为
EntityController
,则不能将其分配给update的第二个参数

最简单(但不是100%类型安全)的解决方案是

private Map<Class<? extends GameObject>, EntityController<? extends GameObject>> registeredControllers;

@SuppressWarnings("unchecked")
public <T extends GameObject> EntityController<T> getController(T o) {
    return (EntityController<T>) registeredControllers.get(o.getClass());
}
私有映射
public class MyController implements EntityController<MyType> {
    public void update(float elapsed, MyType applyTo){}
}
private Map<Class<? extends GameObject>, EntityController<? extends GameObject>> registeredControllers;

@SuppressWarnings("unchecked")
public <T extends GameObject> EntityController<T> getController(T o) {
    return (EntityController<T>) registeredControllers.get(o.getClass());
}