アリーナ ゲームの場合、考えられるゲームタイプの列挙があります。これらのゲームタイプのそれぞれには、イベントをリッスンして構成値を処理する列挙型ごとに 2 つのクラスが関連付けられたバリアントのリストがあります。現在、列挙型からこれらのリスナーと構成ローダーを構築しています。その際、switch ステートメントを使用する必要があります。次のメソッドは、列挙値からリスナーを取得します。
public GameListener getListener(CustomGame cg) {
switch(this) {
case Slayer:
return new SlayerListener(cg);
case Capture_The_Flag:
return new CaptureTheFlagListener(cg);
case Oddball:
return new OddballListener(cg);
case HeadHunter:
return new HeadHunterListener(cg);
case King_Of_The_Hill:
return new KOTHListener(cg);
default:
return null;
}
}
構成にも同様のコードが存在します。抽象メソッドを使用して switch ステートメントを削除できることは知っていますが、もっと簡単な方法があるかどうか疑問に思っていました。列挙型に 2 つの型パラメーターを使用させようとしましたが、それを機能させることができず、それらを使用して構築することもできませんでした。1 つのオプションは、 を渡し、Class<T>
リフレクションを介してオブジェクトを構築することです。
このクラスには、列挙ごとに非常に異なるレイアウトを持つ別のメソッドがあり、そのための最良のオプションは抽象メソッドになると思いますが、ここにはもっと簡単な解決策があるように感じます。