当我实例化/声明该类时,是否可以指定该类的父类?例如,我可以做类似的事情:
MonitoredDevice<DeviceTypeToExtend> device = null;
然后根据该语句,MonitoredDevice 类将从类型参数 DeviceTypeToExtend 扩展。现在,我知道您不能使用类型参数从超类扩展,但是有没有人知道类似的东西可以实现从特定父类“动态”扩展的目标。
谢谢,
史蒂夫
当我实例化/声明该类时,是否可以指定该类的父类?例如,我可以做类似的事情:
MonitoredDevice<DeviceTypeToExtend> device = null;
然后根据该语句,MonitoredDevice 类将从类型参数 DeviceTypeToExtend 扩展。现在,我知道您不能使用类型参数从超类扩展,但是有没有人知道类似的东西可以实现从特定父类“动态”扩展的目标。
谢谢,
史蒂夫
继承被高估了,改用组合(它更强大、更灵活):
MonitoredDevice monitored = new MonitoredDevice();
monitor.setTargetDevice(new BaseDevice());
或装饰器模式:
new MonitoredDeviceDecorator(new BaseDevice());
不,您不能这样做,因为这样MonitoredDevice
该类必须直接从其自己的类型参数扩展,这是不可能的。相反,您可以像MonitoredDevice<T extends MonitoredDevice<T>>
Enums 一样拥有类似的东西,然后仍然会有超类型的原始类型信息。
你有很多选择。如果您发布 MonitoredDevice 和 DeviceTypeToExtend 的接口可能会有所帮助,这样我们就可以更好地了解您希望实现的目标。
mhaller 的反馈是有道理的;你可能不想用继承来做这一切。
一种可能性:使用泛型。您的 MonitoredDevice 界面可能如下所示:
public interface MonitoredDevice<E> {
E computeFoo();
void doBar();
}
您还可以使用组合(可能最简单)或多级类层次结构(不推荐)。