EnumSet<SomeType>ID を指定してメソッドを呼び出すと、SomeType消去が行われ、不明になります。SomeTypeインスタンスを受け入れるかClass<SomeType>、消去を回避する必要があります。
private void doSomethingA(EnumSet<TypeA>){ ... }
private void doSomethingA(EnumSet<TypeA>){ ... }
private void <T extends Enum<T>> doSomething(EnumSet<T extends BaseType> s, T tInst){
if(t instanceof TypeA) doSomethingA(s);
if(t instanceof TypeB) doSomethingB(s);
}
T読みやすくするためにandを使用しますtが、次のように書くこともできます。
private void <SOMETYPE extends Enum<SOMETYPE>> doSomething(EnumSet<SOMETYPE> s, SOMETYPE instanceOfSomeType){
if(instanceOfThatType instanceof TypeA) doSomethingA(s);
if(instanceOfThatType instanceof TypeB) doSomethingB(s);
}
SOMETYPEとTはそのまま書かれていることに注意してください。これらは実行時のプレースホルダーですが、コードの作成時にはリテラルです。