簡體   English   中英

不擴展Enum的泛型的Enum.valueOf的替代方案?

[英]Alternatives to Enum.valueOf for a generic that doesn't extend Enum?

我有以下代碼

protected <T> T func(Class<T> c) {
    if (c.isEnum()) {
        try {
            return c.cast(Enum.valueOf(c, "string"));
        } catch (IllegalArgumentException e) {
            return null;
        }
    }
    return null;
}

IDEA報告錯誤的Wrong 1st argument type. Found: 'java.lang.Class<T>', required: 'java.lang.Class<T>' valueOf函數中Wrong 1st argument type. Found: 'java.lang.Class<T>', required: 'java.lang.Class<T>' 我可以通過在函數頭中指定<T extends Enum<T>>來避免此錯誤,但是想法是T可以是多種類型,而不僅僅是枚舉。 是否可以在不限制T情況下編譯/運行代碼?

我沒有使用Enum.valueOf() ,而是使用了Class.getEnumConstants()

protected <T> T func(Class<T> c) {
    if (c.isEnum())
        for (T t : c.getEnumConstants())
            if (((Enum<?>) t).name().equals("KG"))
                return t;
    return null;
}

這樣,它可以毫無警告地進行編譯,但是我不確定這是否是您想要的。

快速,令人不快的答案(我敢肯定會有更好的答案)。

valueOf使用c之前,您始終可以將其valueOfClass 所以

return (T) Enum.valueOf((Class) c, "string");

會工作; 如果您知道唯一可以提供的Enum類具有一個名為string的枚舉常量。

可能也有一些警告要禁止在那里...

暫無
暫無

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

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