[英]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.