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>>Enums 一样拥有类似的东西,然后仍然会有超类型的原始类型信息。

于 2010-01-04T18:30:46.600 回答
0

你有很多选择。如果您发布 MonitoredDevice 和 DeviceTypeToExtend 的接口可能会有所帮助,这样我们就可以更好地了解您希望实现的目标。

mhaller 的反馈是有道理的;你可能不想用继承来做这一切。

一种可能性:使用泛型。您的 MonitoredDevice 界面可能如下所示:

public interface MonitoredDevice<E> {

  E computeFoo();

  void doBar();

}

您还可以使用组合(可能最简单)或多级类层次结构(不推荐)。

于 2010-01-04T18:38:53.057 回答