StaticVehicleInformation
車両のタイプ、シリアル番号、色など、車両に関する「静的」情報を保持するクラスがあるとします。
これで、運転中の車両を追跡して地図上に表示する追跡アプリケーションができました。このような場合StaticVehicleInformation
は、でラップされ、DynamicVehicleEntry<? extends StaticVehicleInformation>
基本的にcurrentPosition、speed、currentDriverなどの「動的」情報が追加されます。同時に、<T extends StaticVehicleInformation> <T> getStaticVehicleInformation()
ラップされた静的情報を返すメソッドがあります。
私の地図または基本的にさまざまな移動中の車を表示するビューでは、主にを扱ってList<DynamicVehicleEntry <? extends StaticVehicleInformation>
いますが、別のアイコンなどを表示するには、実際に扱っている車の種類を区別する必要があります。したがって、具体的なDynamicVehicleEntry
クラス(DynamicCarEntry extends DynamicVehicleEntry <StaticCarInformation>
、、DynamicMotorcycleEntry extends DynamicVehicleEntry <StaticMotorcycleInformation>
...)を使用することで、さまざまなタイプのライブトラック車両を取得し、さまざまな静的属性と(必要に応じて)特定の「動的」属性(のサブクラス内)を取得しますDynamicVehicleEntry
。
DynamicVehicleEntry
データをUIから分離するという目標のために、表示するタイプに基づいてさまざまなUI要素を返すファクトリを構築しました。
// .... Factory....
public static Node createNewControlFromType(DynamicVehicleEntry <? extends StaticVehicleInformation> entry) {
// from specific to general
if (entry instanceof DynamicCarEntry) {
return new CarControl(entry);
} else if (entry instanceof DynamicMotorcycleEntry) {
return new MotorcycleControl(entry);
} else {
// no concrete UI-Method found, so return a generic Control showing a dummy-icon
// and only the most generic information common to every DynamicVehicleEntry and the wrapped StaticVehicleInformation
return new GenericControl(entry);
}
}
instanceOf
においがして、ジェネリックの型消去も首を折る可能性があると思います。Static...Information
およびStatic...Information
クラスを変更できないと仮定して、これをどのように解決する必要があるかについてのアイデアはありますか?
前もって感謝します。
アップデート:
私はそれについていくつかの広範な検索を行いましたが、特に既存のクラスを変更できない場合は、Visitor Patternで必要になるため、より良い解決策は見つかりませんでした。ここのコメントで述べたように、同じことをするためにいくつかの反射魔法を行うことができますが、私の理解から、instanceofは「光」-とにかく反射です。