我有一个枚举,其中包含街道中这三种类型的区域:
public enum EArea
{
VEHICLE_WAY,
SIDEWALK,
FORBIDDEN
}
我想为VEHICLE_WAY
定义两个子类型。例如DIRECT_LANE
和TURNLEFT_LANE
。
我想也许我可以使用this并定义子类型,但只有VEHICLE_WAY
有子类型。有没有更好的想法在java中这样做?
答案 0 :(得分:1)
我建议不要这样使用枚举。更好的方法是从枚举值创建类,并将VEHICLE_WAY
类扩展为所需的子类型。枚举值FORBIDDEN
听起来更像是属性。
public class VehicleWay {
...
}
public class DirectLane extends VehicleWay {
...
}
public class TurnLeftLane extends VehicleWay {
...
}
public class SideWalk {
...
}
答案 1 :(得分:0)
您可以定义一个接口EArea
并让多个枚举实现它。
答案 2 :(得分:0)
您可以将以下类与嵌套子类型枚举一起使用,但是子类型有些隐藏,您可以继续使用单个枚举;
enum EArea {
VEHICLE_WAY, SIDEWALK, FORBIDDEN;
Lane lane;
public Lane getLane() {
return lane;
}
public EArea setLane(Lane lane) {
this.lane = lane;
return this;
}
enum Lane {
DIRECT_LANE, TURNLEFT_LANE
}
}
然后你可以使用像<; p>这样的子类型
EArea.VEHICLE_WAY.setLane(EArea.Lane.DIRECT_LANE); // returns a direct lane vehicle way
EArea.VEHICLE_WAY.setLane(EArea.Lane.TURNLEFT_LANE); // returns a turnleft lane vehicle way
虽然这允许将通道添加到其他枚举,但如果您愿意,可以在getter / setter中进行验证。