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
はそのまま書かれていることに注意してください。これらは実行時のプレースホルダーですが、コードの作成時にはリテラルです。