簡體   English   中英

Enum的Java通用綁定(約束)

[英]Java Generic bound (constraint) for Enum

我試圖綁定(約束)Java泛型類型變量為枚舉(任何枚舉)並失敗。 你能告訴我為什么嗎?

import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.cellprocessor.ift.StringCellProcessor;

public class ParseEnum<TEnum extends Enum> extends CellProcessorAdaptor implements StringCellProcessor {

    public Object execute(final Object value, final CsvContext context) {
        ...
        final TEnum result;
        if (value instanceof TEnum) {
            result = (TEnum) value;
        } else if( value instanceof String ) {
                result = TEnum.valueOf((String)value);
        } else {
            ...
        }
        ...
}

(這些是我試圖擴展SuperCSV CellProcessor的實際代碼的一部分。)

value instanceof TEnum給了我這個錯誤(在Eclipse中):

“無法對類型參數TEnum執行instanceof檢查。請使用其擦除枚舉,因為在運行時將刪除其他泛型類型信息”

TEnum.valueOf((String)value)給出了這個錯誤:

“Enum類型中的方法valueOf(Class,String)不適用於參數(String)”

你必須傳遞枚舉類才能做到這一點(就像EnumSet.allOf()一樣)。

public class ParseEnum<TEnum extends Enum<TEnum>> extends CellProcessorAdaptor implements StringCellProcessor {

    private Class<TEnum> enumType;

    public ParseEnum(Class<TEnum> enumType) {
        this.enumType = enumType;
    }

    public Object execute(final Object value, final CsvContext context) {
        ...
        final TEnum result;
        if (value.getClass().equals(enumType)) {
            result = (TEnum) value;
        } 
        else if (value instanceof String) {
            result = Enum.valueOf(enumType, (String) value);
        } 
        else {
            ...
        }

暫無
暫無

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

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