gpt4 book ai didi

枚举中的 Java 有界类型参数

转载 作者:行者123 更新时间:2023-12-02 06:19:27 26 4
gpt4 key购买 nike

我正在尝试创建以下枚举。

public enum MyEnum{
LEAD {
@Override
public boolean isValid(Lead lead) { //compile error, asks to retain type as T
}
},
TASK {
@Override
public boolean isValid(Task task) { //compile error, asks to retain type as T
}
};

public abstract <T extends SObject> boolean isValid(T object);
}

LeadTask 类都扩展了 SObject。我的目的是基本上让客户能够使用 MyEnum.LEAD.isValid(lead)MyEnum.TASK.isValid(task)。编译器不应允许传递其他类型。

有人可以帮助理解为什么会发生这种情况吗?

谢谢

最佳答案

您需要使用相同的泛型方法覆盖泛型方法。如果您想做您所要求的事情,您需要一个通用的 - 其中 enum不可能。

重点是我指的是enum通过类引用 - 即

final MyEnum myenum = MyEnum.LEAD;

现在如果我打电话 myenum.isValid()我应该能够使用 any SObject 来调用它由您的 abstract 定义方法。
您拥有的通用方法定义实际上没有执行任何操作。它所做的只是捕获传入的类型 SObject并将其存储为T 。例如,通用方法通常用于将参数类型绑定(bind)在一起

<T> void compare(Collection<T> coll, Comparator<T> comparator);

这里我们不关心什么T实际上是 - 我们所需要的只是 Comparator可以比较 Collection 中的内容.

您正在考虑的是一个通用类,例如:

interface MyIface<T> {
boolean isValid(T object);
}

然后

class LeadValid implements MyIface<Lead> {
public boolean isValid(Lead object){}
}

您会看到不同之处在于您将拥有 MyIface<Lead> - 您必须声明 MyIface类型 。在 enum如果你只有 MyEnum .

关于枚举中的 Java 有界类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148584/

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