我无法找到解决我的问题的方法。在这两种情况下,我都会收到编译错误。有什么帮助让它工作吗?
情况1:
public class Entity<T extends EntityHandler<Entity>> {
protected T handler;
public void remove() {
for (Entity entity : handler.getEntities()) {
// do stuff
}
handler.saveEntity(this);
}
}
public class Player<T extends PlayerHandler<Player>> extends Entity</*error here*/T> {}
public class EntityHandler<T extends Entity> {
private List<T> entities;
public void saveEntity(T entity) {
// do stuff
}
public List<T> getEntities() {
return entities;
}
}
public class PlayerHandler<T extends Player> extends EntityHandler<T> {}
错误:类型参数 T 不在类型变量 T 的范围内
案例二:
public class Entity<T extends EntityHandler<? extends Entity>> {
protected T handler;
public void remove() {
for (Entity entity : handler.getEntities()) {
// do stuff
}
handler.saveEntity(/*error here*/this);
}
}
public class Player<T extends PlayerHandler<? extends Player>> extends Entity<T> {}
public class EntityHandler<T extends Entity> {
private List<T> entities;
public void saveEntity(T entity) {
// do stuff
}
public List<T> getEntities() {
return entities;
}
}
public class PlayerHandler<T extends Player> extends EntityHandler<T> {}
错误:不兼容的类型:实体无法转换为 capture#1 of ? 扩展实体
问题:为什么增强的 for 循环编译并且它不会抛出类似于上面的编译错误?