2013-07-22 3 views
2

Android Spinner에서 열거 된 값을 얻을 수 있도록 아래 클래스를 작성했습니다.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) 
    } 
} 

답변

1

인해 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); 
    } 
} 
관련 문제