gpt4 book ai didi

java - 比较枚举条目 - Java

转载 作者:行者123 更新时间:2023-12-02 02:54:39 26 4
gpt4 key购买 nike

假设我有几台机器:

//Test code of course.
public class Start{
public static void main(String args[]){
System.out.println(Machine.COFFEE_GRINDER.getCatalogId());
System.out.println(Machine.COFFEE_MACHINE.isOfType(Machine.BASIC_MACHINE));
//The above should be true.
}

private enum Machine {
BASIC_MACHINE (-1),
BEVERAGE (-1),
COFFEE(-1),
COFFEE_GRINDER (5),
COFFEE_MACHINE (6),
GARDEN (-1),
LAWN_MOWER (28);

private final int catalogId;

public int getCatalogId(){
return catalogId;
}

public boolean isOfType(Machine to){
return this == to;
}

Machine (int catalogId) {
this.catalogId = catalogId;
}
}
}

在上面的示例中,存在出现在目录中的机器,并且具有与其关联的 ID 号。还有章节和章节的章节。所以 BEVERAGE 机器仍然是 BASIC_MACHINE。咖啡机仍然是饮料机。

程序中的一些函数在执行其功能之前,必须检查机器是否实际上是 BEFERAGE 机器。目录中的 COFFEE_GRINDER 和 COFFEE_MACHINE 都会检查出来,并且该函数应该会通过。

我正在寻找的行为与instanceof或抽象类的继承相当。无论如何,COFFEE_MACHINE 最终是 BASIC_MACHINE 的一种类型,我想检查一下。

所以:

Machine.COFFEE_MACHINE isa Machine.COFFEE
Machine.BEVERAGE isa MACHINE.BASIC_MACHINE
Machine.LAWN_MOWER isa Machine.GARDEN == Machine.BASIC_MACHINE
Machine.COFFEE_MACHINE isnota Machine.COFFEE_GRINDER
Machine.LAWN_MOWER isnota Machine.COFFEE

最佳答案

一个可能的解决方案是使用回调和保存的父类(super class)型来模拟一些继承。我很好奇这是否是最好的方法。

实现它看起来像这样:

//Test code of course.
public class Start{
public static void main(String args[]){
System.out.println(Machine.COFFEE_GRINDER.getCatalogId());
System.out.println(Machine.COFFEE_MACHINE.isOfType(Machine.BASIC_MACHINE)); //Should be true.
}

private enum Machine {
BASIC_MACHINE (-1),
BEVERAGE (-1, BASIC_MACHINE),
COFFEE(-1, BEVERAGE),
COFFEE_GRINDER (5, COFFEE),
COFFEE_MACHINE (6, COFFEE),
GARDEN (-1, BASIC_MACHINE),
LAWN_MOWER (28, GARDEN);

private int catalogId;
private Machine superMachine;

public int getCatalogId(){
return catalogId;
}

public Machine getSuperMachine(){
return superMachine;
}

//With callback to superMachine (if present)
public boolean isOfType(Machine to){
return this == to || (getSuperMachine() != null && getSuperMachine().isOfType(to));
}

Machine (int catalogId) {
this.catalogId = catalogId;
}

Machine (int catalogId, Machine superMachine) {
this(catalogId);
this.superMachine = superMachine;
}
}
}

关于java - 比较枚举条目 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308797/

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