0

クラスをインスタンス化/宣言するときに、クラスの親を指定することはできますか?たとえば、私はこれに似た何かをすることができますか?

MonitoredDevice<DeviceTypeToExtend> device = null;

そして、そのステートメントから、MonitoredDeviceクラスはタイプパラメーターDeviceTypeToExtendから拡張されます。さて、タイプパラメータを使用してスーパークラスから拡張することはできないことはわかっていますが、特定の親から「動的に」拡張するというこの目標を達成するために似たようなことを知っている人はいますか。

ありがとう、

スティーブ

4

3 に答える 3

3

継承は過大評価されています。代わりに構成を使用してください(より強力で柔軟性があります)。

MonitoredDevice monitored = new MonitoredDevice();
monitor.setTargetDevice(new BaseDevice());

またはデコレータパターン:

new MonitoredDeviceDecorator(new BaseDevice());
于 2010-01-04T18:29:26.103 に答える
1

いいえ、それはできません。MonitoredDeviceクラスはそれ自体の型パラメーターから直接拡張する必要があるためです。これは不可能です。代わりに、列挙型のようにのようなものを使用することもできますがMonitoredDevice<T extends MonitoredDevice<T>>、その場合でも、スーパータイプの生の型情報が存在します。

于 2010-01-04T18:30:46.600 に答える
0

あなたにはたくさんの選択肢があります。MonitoredDeviceとDeviceTypeToExtendのインターフェースを投稿すると役立つ場合があります。これにより、達成したいことをより正確に把握できます。

mhallerのフィードバックは理にかなっています。あなたはおそらくそれをすべて継承でやりたくないでしょう。

1つの可能性:ジェネリックを使用します。MonitoredDeviceインターフェイスは次のようになります。

public interface MonitoredDevice<E> {

  E computeFoo();

  void doBar();

}

構成(おそらく最も単純)またはマルチレベルのクラス階層(非推奨)を使用することもできます。

于 2010-01-04T18:38:53.057 に答える