gpt4 book ai didi

java - 对泛型有界通配符类型的困惑

转载 作者:行者123 更新时间:2023-11-29 03:51:23 25 4
gpt4 key购买 nike

非常简单的 Java 问题。此代码有错误:

public abstract class SubTypeDependentEditor<T> implements Editor<T> {
protected abstract Editor<? extends T> getEditorFor(T obj);

public void edit(T obj) {
Editor<? extends T> editor = getEditorFor(obj);
editor.edit(obj); // ERROR IS HERE
}
}

修复它的正确方法是什么?

T的想法基本上只是一种类的层次结构根,所以给定这样的层次结构:

class Entity {}
class EntityA extends Entity {}
class EntityB extends Entity {}

一个人会有T设置为 EntitygetEditorFor(T obj)负责返回Editor<X>其中 X取决于 obj的具体类型并且总是 Is-A T .所以,如果你有 SubTypeDependentEditor<Entity> , getEditorFor(T obj)返回 Editor<EntityA>什么时候objEntityAEditor<EntityB>什么时候objEntityB .

这是否有可能在没有警告的情况下实现?

更新:

protected abstract Editor<? extends T> getEditorFor(T obj);     

基本上可以有任何其他签名,但实现该代码的代码只有对象是 Editor<X> , 所以如果这个方法返回 Editor<T>我不确定如何实现 getEditorFor(T obj) .

最佳答案

protected abstract Editor<? extends T> getEditorFor(T obj);

意味着 getEditorFor() 为 T 的未知子类型返回一个编辑器。

您不能将 T 类型的任何值传递给该结果,因为编译器无法证明 obj 的相同具体子类型一起工作Tobj 的类型。

解决办法是改变

protected abstract Editor<? extends T> getEditorFor(T obj);

protected abstract Editor<? super T> getEditorFor(T obj);

表示 getEditorFor 返回一个编辑器,该编辑器编辑包含 obj 的未知类型。

关于java - 对泛型有界通配符类型的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8648767/

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