1

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は「光」-とにかく反射です。

4

0 に答える 0