[英]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.