当我实例化/声明该类时,是否可以指定类的父级?例如,我可以做类似的事情:
MonitoredDevice<DeviceTypeToExtend> device = null;
然后从该语句中,MonitoredDevice类将从类型参数DeviceTypeToExtend扩展。现在,我知道你不能使用类型参数来扩展超类,但是有没有人知道类似的东西来实现从特定父级“动态”扩展的目标。
谢谢,
史蒂夫
答案 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();
}
您还可以使用合成(可能最简单)或多级类层次结构(不推荐)。