gpt4 book ai didi

java - 在 Java 中使用添加函数/字段来枚举案例而不是覆盖?

转载 作者:行者123 更新时间:2023-12-01 14:13:14 24 4
gpt4 key购买 nike

我偶然发现 Java 1.8 编译器允许以下语法:

enum AnimalType {
DOG {
@Override
public String toString() {
return "I am a dog";
}
},
CAT {
@Override
public String toString() {
return "I am a cat";
}

public void doCatThings() {
// ...
}
},
}
覆盖 toString()单独工作非常好。调用 AnimalType.DOG结果是字符串“我是一只狗”。
但除此之外,我找不到任何有关此枚举案例自定义可用于什么的信息。请注意案例 CAT 的其他公共(public)方法.在定义任何其他公共(public)方法或字段时,似乎无论如何都无法从外部访问它。
那么这有什么关系呢?这只是技术上正确的语法但毫无意义的东西吗?

最佳答案

toString继承自 Object,但行为仍然是多态的:DOG 和 CAT “打印自己”不同。现在,如果您将使用 sound() 级别的抽象方法,那么您自己的自定义方法(如以下示例中的 AnimalType)将更有意义。枚举定义:

enum AnimalType {
DOG {
@Override
public String toString() {
return "I am a dog";
}

@Override
public void sound() {
System.out.println("Meowww");
}

},
CAT {
@Override
public String toString() {
return "I am a cat";
}

@Override
public void sound() {
System.out.println("Woof, I'm a barking dog");
}
};

abstract void sound();
}
现在您可以向枚举添加多态自定义行为并在不知道实际动物的情况下使用它:

public class SampleClass {

public static void doSound(AnimalType animal) {
...
animal.sound();
}
}

// usage:

SampleClass.doSound(AnimalType.DOG);

实际用法可能会有所不同,在我的脑海中,您可以实现有限状态机,解析枚举是否是 token ,计算枚举是否是几何图形(例如计算 3d 图形的体积)等等。它是像许多其他 Java 程序员一样的工具。明智地使用它:)

关于java - 在 Java 中使用添加函数/字段来枚举案例而不是覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62816004/

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