gpt4 book ai didi

java - 嵌套泛型

转载 作者:行者123 更新时间:2023-12-01 14:48:04 25 4
gpt4 key购买 nike

我有几门课:

标准类:

WorkflowGraph模型:

public class WorkflowGraphModel<T> implements IWorkflowGraphModel<T>

public WorkflowGraphModel( List<IWorkflowGraphEntry<T>> entries )
{
this.entries = entries;
}

WorkflowGraphEntry:

public class WorkflowGraphEntry<T> implements IWorkflowGraphEntry<T>

特殊实现:

ApprovalStepGraphEntry

public class ApprovalStepGraphEntry extends WorkflowGraphEntry<ApprovalStep>

ApprovalStepGraphModel

public class ApprovalStepGraphModel extends WorkflowGraphModel<ApprovalStepGraphEntry>

public ApprovalStepGraphModel( List<ApprovalStepGraphEntry> stepEntries )
{
super( stepEntries );
}

调用时出错

super( stepEntries );

WorkflowGraphModel (java.util.List>)WorkflowGraphModel 中的内容无法应用于 (java.util.List)

我不知道为什么编译器不知道 ApprovalStepGraphEntry 实现 IWorkflowGraphEntry。在我看来,泛型已经设置得很好。

最佳答案

类型List <IWorkflowGraphEntry <ApprovalStep>>不可从 List <ApprovalStepGraphEntry> 分配。你可能应该改变 List <IWorkflowGraphEntry <ApprovalStep>>List<? extends IWorkflowGraphEntry <ApprovalStep>>或类似的东西。

这里解释了为什么上述类型不兼容。让我们考虑一下我们有:

interface A {...}
class B extends A {...}
class B1 extends A {...}
interface C <T> {public void set (T t);}

那么下列说法不正确:

C <A> ca;
C <B> cb = ...;
ca = cb; // Error here
ca.set (new B1 ()); // Correct!

注意一次ca声明为C <A> ca ,方法ca.set接受 A 类型的参数因此new B1()是它的有效值。同时,方法cb.set接受 B 类型的参数,因此 new B1()不是此参数的有效值。如果我们能够分配 cbca ,那么我们稍后就可以调用ca.set (new B1())它将把无效类型的值传递给 set 方法。为了防止这种情况,编译器将 C <A> 视为和C <B>即使 A 类型也不兼容和B兼容。

关于java - 嵌套泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197675/

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