(모든) enumset을 사용하고 개별 열거 형을 활성화 할 수있는 간단한 양식을 표시하는 일반 위젯을 작성하려고합니다. 꺼져. 아래는 클래스의 최소 버전입니다 (실제로 안드로이드에서 실행하도록 설정되어 있습니다.) eclipse는 "AbstractCollection 유형의 메소드 add (? 캡처? -7)는 인수 (T)에 적용 할 수 없습니다"라는 신음 소리를냅니다.Java에서 일반적인 enumset 위젯 작성 - 구문을 올바르게 가져올 수 없음
몇 줄 앞에서 문제가없는 remove (정확하게 동일한 서명이 있음)가 호출되었습니다. 열거 형을 집합으로 바꾸는 것은 도움이되지 않습니다.
이 문제를 해결하는 데 필요한 마법 구문은 무엇입니까?
나도 최선의 클래스 정의를 사용하지 잘 수, 나는 안드로이드 개발자 도구 v21.1.0-569685을 사용하고 있습니다)하지만 문제는 적절한 이클립스에 표시됩니다 (인디고)
package com.test.ui;
import java.util.EnumSet;
import android.util.Log;
import android.view.View;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.CheckBox;
public class EnumSetSelector<T extends Enum<?>> implements OnClickListener{
Class<T> enumclass;
EnumSet<?> theset; // EnumSet<T> theset; fails
boolean haschanged;
public EnumSetSelector(Class<T> eclass) {
enumclass = eclass;
}
public ViewGroup prepareSet(EnumSet<?> esvals, ViewGroup vg, LayoutInflater li) {
theset = esvals;
T[] allvals = enumclass.getEnumConstants();
Log.d("XXXXXXZ","here are " + allvals.length);
ViewGroup grp = (ViewGroup)li.inflate(R.layout.ui_enum_selector,vg,false);
for (T av:allvals) {
Log.d("XXXXXXZ"," - " + av);
CheckBox cb = (CheckBox)li.inflate(R.layout.ui_enum_selector_entry,vg,false);
cb.setText(String.valueOf(av));
cb.setChecked(theset.contains(av));
cb.setTag(av);
grp.addView(cb);
esvals.remove(av);
}
vg.addView(grp);
return grp;
}
@Override
public void onClick(View v) {
final T thisenum = (T)v.getTag();
final boolean oldval = theset.contains(thisenum);
final CheckBox cb = (CheckBox)v;
if (cb.isChecked() != oldval) {
if (cb.isChecked()) {
cb.setChecked(false);
theset.remove(thisenum);
} else {
cb.setChecked(true);
theset.add(thisenum);
theset.add(EnumSet.of(thisenum));
}
Log.d("XXXXXXZ", "" + String.valueOf(v.getTag()) + " now "
+ (theset.contains(thisenum)));
}
}
}
EnumSet >에 null을 제외한 아무 것도 추가 할 수 없습니다. 그 이유는 세트의 유형을 모르기 때문입니다. 세트를'EnumSet'로 만들고 클래스를'EnumSetSelector >'으로 만들면 어떻게됩니까? –
"'EnumSet theSet;'fails ': 좀 더 구체적으로 말씀해주십시오 : 컴파일에 실패 했습니까? 그렇다면 컴파일 오류가 무엇입니까? –
meriton
Ooh yes JB - 내가 T EnumSet을 사용하면 작동합니다. EnlightSet 어디서나, 괜찮습니다. 이전에 시도해 보았다고 생각했지만, 그 동안 이클립스도 업그레이드했습니다 ... 너무 오래 서클에서 돌아 다니는 경우가 있습니다. 핑! Meriton - 첫 번째 단락에 있습니다. –
pootle