gpt4 book ai didi

Java - 当枚举本身可以用作映射时为什么要使用 EnumMap?

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

我最近一直在阅读 Java。所以我在下面有一个枚举,它充当带有键“JESSIE”和值“My favorite cat”的 map 。

那么为什么有人需要使用 EnumMap?谢谢

public enum Cat {
JESSIE("My favorite cat");

private String description;

Cat(String description){
this.description = description;
}
}

最佳答案

enumEnumMap 中的 ,因此这两件事是完全不同的。您无法知道您可能想与您的猫联系起来的所有类型的事情。

description可能是 Cat 的固有部分,但您可能希望将猫与它们的仆人、它们(当前)居住的地方或它们(当前)喜欢的食物联系起来。

EnumMap<Cat, Human> catsServant;
EnumMap<Cat, House> catsHome;
EnumMap<Cat, Meal> catsFood;

因为您不需要修改 Cat将它与另一个对象相关联,这使得它更容易使用,如果你用所有你可能想要将你的猫与之相关联的可能的东西填充它,你的枚举会变得很大。

第二个问题是 enum s 是单例,这意味着如果你要在你的 Cat 中放置可变状态(强烈反对!)通过添加 setDescription(String)方法,它将在您的程序中全局更改它。对于简单的程序或像 description 这样的简单属性来说,这可能无关紧要。 ,但当您有更复杂的代码时,它确实很重要。

现在是一个更现实的例子。 JDK TimeUnit enum 具有诸如 MINUTE 之类的值,并且创作者不可能知道人们可能想与他们联系的所有可能事物。但是使用 EnumMap我可以提供以下母语翻译:

EnumMap<TimeUnit, String> xlate = new EnumMap<>(TimeUnit.class);
xlate.put(TimeUnit.MINUTE, "Minuutti");
xlate.put(TimeUnit.SECOND, "Sekunti");

TimeUnit不是我的类(class),所以我无法编辑它以包含这些翻译,而且无论如何它都是错误的地方。

A related question就是为什么有一个特殊的EnumMap ,因为您也可以使用法线贴图,例如 HashMap<Cat, Human> .

关于Java - 当枚举本身可以用作映射时为什么要使用 EnumMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60904300/

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