我有两个类:发动机和列车组(多单元(,两个类共享它们的ID空间,由名称和一系列id=<series>-<name>
组成。
这是我的引擎类(它是抽象的,因为有引擎的子类型(柴油机,蒸汽机,...(:
public abstract class Engine extends RollingStock {
private String name;
private String series;
public Engine(int length, boolean couplingFront, boolean couplingBack, String name, String series) {
super(length, couplingFront, couplingBack);
this.name = name;
this.series = series;
}
}
这是我的火车组课程
public class Trainset extends RollingStock {
private String name;
private String series;
public Trainset(int length, boolean couplingFront, boolean couplingBack, String name, String series) {
super(length, couplingFront, couplingBack);
this.name = name;
this.series = series;
}
}
因此,这两个类都具有属性名称和系列。
现在,我创建了另一个类SharedIdSpace来确保它们使用相同的 ID 空间。但是,我不知道我应该如何巧妙地实现这一点......
目前你可以创建一个新的基类:
class IdSpaceRollingStock extends RollingStock {
protected final String name;
protected final String series;
public IdSpaceRollingStock (int length, boolean couplingFront, boolean couplingBack,
String name, String series) {
super(length, couplingFront, couplingBack);
this.name = name;
this.series = series;
}
...
}
public abstract class Engine extends IdSpaceRollingStock {
public abstract class Trainset extends IdSpaceRollingStock {
这可能是一个临时解决方案,因为它使用人工类向继承结构收费。
但是,它是最小的解决方案,具有最少的附加代码。覆盖等于和哈希代码在那里。