私は 2 つの列挙型を持っています (そして、ユーザーが独自のものを追加できるようにしたいと考えています)。
enum PhoneSensor { A, B };
enum RobotSensor { A, C };
列挙型を受け取るメソッドで列挙型プロパティを使用しない場合、これはうまく機能します。
public <E extends Enum<E>> void registerSensor(E e) {
System.out.print(e);
}
しかし、テンプレート E を列挙型 (ここではスイッチで使用するため) として認識させたい場合、「E 型の値を切り替えることはできません」というエラーが表示されます。(Eclipse では、switch(e) の 'e' に赤の下線が引かれています)
public <E extends Enum<E>> void registerSensor(EnumSet<E> eSet) {
for (E e : eSet) {
System.out.print("value is ");
// Cannot switch on a value of type E.
// Only convertible int values or enum variables are permitted
switch(e) {
case PhoneSensor.A:
System.out.print(e);
default:
return;
}
}
}
コンパイル時にテンプレートに関する情報が消去されるという消去について少し理解しているので、それが問題です。しかし、Class clazz を渡したり、インターフェイスを実装したりする私の試みはうまくいきませんでした。これに対する良い解決策は何ですか?