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());
}