gpt4 book ai didi

java - 使用嵌套泛型和继承编译错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:33 25 4
gpt4 key购买 nike

我找不到解决我的问题的方法。在这两种情况下,我都会遇到编译错误。有什么帮助让它发挥作用吗?

案例一:

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> {}

错误:类型不兼容:实体无法转换为捕获#1 of ?扩展实体

问题:为什么增强的for循环编译后没有抛出类似上述的编译错误?

最佳答案

在第一种情况下,您在错误的地方标记了错误。它在这里:

public class Player<T extends PlayerHandler<Player>> extends Entity<T //here> {}

Error:(20, 73) java: type argument T is not within bounds of type-variable T

这很容易 - Entity只能使用扩展 EntityHandler 的类进行参数化.

在第二种情况下,您的 for由于 erasure 编译, 所以基本上 getEntities只返回某物的列表。

至于saveEntity错误,您正在尝试传递 capture<? extends Entity但方法期望有 Entity<T> , 这是不允许的。

关于java - 使用嵌套泛型和继承编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com