繁体   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