无法访问Enum <?>.valueOf(String)方法的泛型类型(或如何获取.class的泛型参数)?

exp*_*ert 4 java generics

如果给定的枚举是泛型类的参数,我如何访问枚举的静态方法?

考虑以下示例

public class EnumListBox<T extends Enum<T>> extends ListBox implements LeafValueEditor<T>
{
    @Override
    public void setValue(T value)
    {
        // something..
    }

    @Override
    public T getValue()
    {
        int ndx = getSelectedIndex();
        String val = getValue(ndx);
        return T.valueOf(val);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因Enum<?>.valueOf(String),我无法使用.此方法的另一个版本有两个参数,Class<Enum<?>>并且我希望无法实例化T.class.

你会如何解决这个问题?基本上我想要任何枚举的通用ListBox包装器.

Ted*_*opp 8

最简单的解决方法是在构造函数中传递枚举的实例EnumListBox.

public class EnumListBox<T extends Enum<?>> extends ListBox implements LeafValueEditor<T>
{
    private final Class<T> mClazz;

    public EnumListBox(Class<T> clazz) {
        mClazz = clazz;
    }

    @Override
    public T getValue()
    {
        int ndx = getSelectedIndex();
        String val = getValue(ndx);
        return Enum.valueOf(mClazz, val);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @CengizCan - 他可能想要那个,但由于类型擦除,它不会发生. (4认同)