[英]Java Bounded Type Parameter in Enum
我正在尝试创建以下枚举。
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);
}
Lead
和Task
类都扩展了SObject
。 我的意图是基本上让客户能够使用MyEnum.LEAD.isValid(lead)
或MyEnum.TASK.isValid(task)
。 编译器不应允许传递其他类型。
有人可以帮助理解为什么会这样。
谢谢
您需要使用相同的泛型方法覆盖泛型方法。 如果你想做你想要的,你需要一个泛型类 - enum
不可能。
关键是我通过类引用引用enum
- 即
final MyEnum myenum = MyEnum.LEAD;
现在,如果我调用myenum.isValid()
我应该可以使用abstract
方法定义的任何 SObject
来调用它。
您拥有的通用方法定义实际上并没有做任何事情。 它所做的就是捕获传入SObject
的类型并将其存储为T
例如,通用方法通常用于将参数类型联系在一起
<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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.