簡體   English   中英

Enum中的Java有界類型參數

[英]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);
}

LeadTask類都擴展了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM