簡體   English   中英

Java:如何從通用類型對象實例中獲取枚舉類的值?

[英]Java: How to get Values of an Enum Class from an Generic Type Object instance?

我想創建一個Enum編輯器,它將Enum類型作為其泛型。 E是泛型類型,但僅限於Enum類型。 如何從實例e中獲取Enum類的值?

public class ComboBoxEnumEditor<E extends Enum<E>>{
    public ComboBoxEnumEditor(E e) {
        // how to get values of E from e?
        // attemp1:
        List values = e.getClass().values();
        // attemp2:
        List values = ((Enum.class)e.getClass()).values();
        // attemp3:
        List values = ((Enum.class)e.getClass()).values();
        // none of the above works... 
    }
}

說我有一個枚舉

public enum Location {
    Default( false, EAttributeLocation.MAIN_TABLE_IF_AVAILABLE ),
    Main( false, EAttributeLocation.MAIN_TABLE ),
    Overflow( false, EAttributeLocation.OVERFLOW_TABLE ),
    Separate( false, EAttributeLocation.SEPARATE_TABLE );
    ......
}

我希望我的ComboBoxEnumEditor能夠做到

{
   ComboBoxEnumEditor(new Location());
}

請幫忙,謝謝。

看起來你在尋找(但我可能會弄錯)

Enum[] values = e.getClass().getEnumConstants();

或者@pbabcdefp這個答案中提到的(對他來說是大+1)如果你想要E[]而不是Enum[]

E[] values = e.getDeclaringClass().getEnumConstants();

也基於

......將Enum類作為其通用類

你的論證應該是Class<E> clazz而不是E e本身所以你可以將它與ComboBoxEnumEditor(Location.class); 在這種情況下,你可以簡單地使用

E[] values = clazz.getEnumConstants();
E[] arr = e.getDeclaringClass().getEnumConstants();

簡短回答......你做不到。 這樣做不是有效的語法,因為您無法實例化枚舉:

ComboBoxEnumEditor(new Location());

相反,您需要傳遞枚舉的類並更改方法簽名,例如

ComboBoxEnumEditor(Location.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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