gpt4 book ai didi

java - 从子类中定义的枚举调用方法 - Java

转载 作者:行者123 更新时间:2023-11-29 06:31:31 25 4
gpt4 key购买 nike

我有一个抽象类 Sensor,它由多个 Device 子类扩展。每个子类定义一个枚举。对于每个子类实例,这些枚举可以不同。这些枚举用于定义 status 实例变量。我想找到一种在父(抽象)类中定义 getter 方法 getStatus() 的方法,这样我就不必在每个子类中重复相同的代码行..

例如:

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;
}
}

最佳答案

你可以让 Sensor 通用

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);
}
}

或者您可以将 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();
}
}

关于java - 从子类中定义的枚举调用方法 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32837505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com