我有一个抽象类Sensor,它由多个Device子类扩展.每个子类定义一个枚举.对于每个子类实例,这些枚举可以是不同的.这些枚举用于定义status实例变量.我想找到一种方法来定义getStatus()父(抽象)类中的getter方法,这样我就不必在每个子类中重新划分相同的代码行.
例如:
abstract class Sensor {
// here I would have liked to declare a "status" variable to hold enum values from subclass
....... status;
Sensor() {}
public String getStatus() {
// return the status defined in the subclass
return status.name();
}
}
class Device extends Sensor {
enum Status { ON, OFF };
Device() {
super.status = Status.ON; // store enum value into variable defined in superclass
}
}
class Device2 extends Sensor {
enum Status { OPEN, CLOSED, LOCKED };
Device2() {
super.status = Status.OPEN;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使传感器通用
class Sensor<T extends Enum<T>> {
T status;
protected Sensor(T status) {
this.status = status;
}
public String getStatus() {
return this.status.toString();
}
}
class Device extends Sensor<Device.Status> {
enum Status {On, Off}
public Device() {
super(Status.On);
}
}
class Device2 extends Sensor<Device2.Status> {
enum Status { OPEN, CLOSED, LOCKED }
Device2() {
super(Status.OPEN);
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以将Sensor和getStatus()抽象化,而不是在Sensor中作为字段状态.
abstract class Sensor {
public abstract String getStatus();
}
class Device extends Sensor {
enum Status {On, Off}
Status status = Status.On;
public String getStatus() {
return this.status.toString();
}
}
class Device2 extends Sensor {
enum Status { OPEN, CLOSED, LOCKED }
Status status = Status.OPEN;
public String getStatus() {
return this.status.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |