簡體   English   中英

如何獲得 valueOf 通用枚舉?

[英]How can I get a valueOf generic enum?

我正在嘗試使用默認方法創建一個接口,該方法返回該枚舉的 valueOf(string) 或 null 它沒有任何,因此我可以輕松實現它,而無需粘貼此代碼的非通用變體我需要這樣的東西的課程。 所以我嘗試這樣做,但它不能編譯:

public interface EnumWNull<T extends Enum<T>> {
    default T getEnumOrNull(String value){
        try {
            return Enum.valueOf(T /*Error: expression expected*/, value);
        }catch (Exception e){
            return null;
        }
    }
}

我不明白為什么。 而且我實際上知道我可以讀取所有值並手動搜索它,但是為了學習和優雅,我想知道比這更好的方法(我覺得應該有更好的方法,如果沒有的話) t,valueOf 的靜態變體的目的是什么?)。

如果不傳遞Class對象,您就無法做到這一點。 您需要模仿Enum.valueOf()的簽名:

static <T extends Enum<T>> T getEnumOrNull(Class<T> enumType, String name) {
    try {
        return Enum.valueOf(enumType, name);
    } catch (IllegalArgumentException e) {
        return null;
    }
}

我建議創建一個靜態實用程序方法,而不是使用默認方法實現接口。 @shmosel 的回答很好地做到了這一點,但我建議使用Optional來傳達該方法可以返回 null (我已經分叉了他的代碼)。

public static <T extends Enum<T>> Optional<T> getEnumValue(Class<T> enumType, String name) {
    try {
        return Optional.of(Enum.valueOf(enumType, name));
    } catch (IllegalArgumentException e) {
        return Optional.empty();
    }
}

public static <T extends Enum> T getEnumOrNull(Class enumType, String name) { return nonNull(name) ? Enum.valueOf(enumType, name) : null; }

暫無
暫無

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

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