我在下面编写了此类,让我从Android Spinner中获得枚举值。getValue()
中有两行都不会编译。
我应该怎么做?
public class EnumSpinnerListener<T extends Enum> implements AdapterView.OnItemSelectedListener {
private String mValue = null;
public EnumSpinnerListener(AdapterView<?> adapterView) {
adapterView.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
mValue = adapterView.getItemAtPosition(i).toString();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
// do nothing
}
public T getValue() {
return Enum.valueOf(T.class, mValue); // cannot select from a type variable
return T.valueOf(mValue); // valueOf(java.lang.Class<T>, String) in enum cannot be applied to (java.lang.String)
}
}
最佳答案
由于type erasure,T
在运行时将没有任何意义,这就是为什么表达式T.class
非法的原因。解决方法是引用Class<T>
实例:
public class EnumSpinnerListener<T extends Enum<T>> // note the correction here
implements AdapterView.OnItemSelectedListener {
private final Class<T> type;
private String mValue = null;
public EnumSpinnerListener(Class<T> type, AdapterView<?> adapterView) {
this.type = type;
adapterView.setOnItemSelectedListener(this);
}
public T getValue() {
return Enum.valueOf(type, mValue);
}
}
关于java - 从Android Spinner获取枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17784067/