在实例化/声明时指定类的超类型?

时间:2010-01-04 18:21:57

标签: java inheritance oop design-principles

当我实例化/声明该类时,是否可以指定类的父级?例如,我可以做类似的事情:

MonitoredDevice<DeviceTypeToExtend> device = null;

然后从该语句中,MonitoredDevice类将从类型参数DeviceTypeToExtend扩展。现在,我知道你不能使用类型参数来扩展超类,但是有没有人知道类似的东西来实现从特定父级“动态”扩展的目标。

谢谢,

史蒂夫

3 个答案:

答案 0 :(得分:3)

继承被高估,改用构图(它更强大,更灵活):

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

或装饰者模式:

new MonitoredDeviceDecorator(new BaseDevice());

答案 1 :(得分:1)

不,你不能这样做,因为MonitoredDevice类必须直接从它自己的类型参数扩展,这是不可能的。你可以使用类似MonitoredDevice<T extends MonitoredDevice<T>>的东西,就像枚举一样,然后仍然会有超类型的原始类型信息。

答案 2 :(得分:0)

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

mhaller的反馈很有意义;你可能不想用继承来做这一切。

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

public interface MonitoredDevice<E> {

  E computeFoo();

  void doBar();

}

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