gpt4 book ai didi

java - 在 Java 中使用枚举或静态字符串变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:31 24 4
gpt4 key购买 nike

有一个关于哪个更好用的问题。 Java5 枚举或静态字符串。

我总是以字符串的形式获取数据。

例如,

private static final String LOAD_DRUGS = "load drugs";

或者使用 Java5 枚举

public enum LoadType
{
LOAD_DRUGS("load drugs");
}

在我的代码中,我总是收到“load drugs”类的字符串。我使用 if else 语句来查看基于它的下一步操作。但我倾向于使用 java5 枚举并使用 switch case,但我总是必须根据我得到的字符串值来获取枚举。

那么这两种方式的优缺点是什么?

谢谢!!

最佳答案

这个答案可能有点矫枉过正。也许有一个徽章。无论如何,在您有很多枚举值并且必须将字符串作为另一个系统向您发送信息的方式来处理的情况下,它可能很有用。这正是我所拥有的(超过 50 个),所以我使用了这个结构,这样我就可以只生成一次由数据库报告的字符串和我在内部使用的枚举的映射,然后就不再考虑它了—— toString 和 fromString 完成所有工作:

package com.stevej;

import com.google.common.collect.HashBiMap;

public enum TestEnum {
ALPHA("Alpha"), BETA("Beta"), GAMMA("Gamma");

private static HashBiMap<TestEnum, String> stringMapping = HashBiMap
.create(TestEnum.values().length);

private String stringValue = null;

TestEnum(String stringValue) {
this.stringValue = stringValue;
}

String getStringValue() {
return this.stringValue;
}

@Override
public String toString() {
return stringMapping.get(this);
}

public static TestEnum fromString(String string) {
return stringMapping.inverse().get(string);
}

static {
for (TestEnum e : TestEnum.values()) {
stringMapping.put(e, e.getStringValue());
}
}
}

这是一个显示数据来回切换的快速测试:

package com.stevej;

public class StackOverflowMain {

public static void main(String[] args) {
System.out.println(">> " + TestEnum.ALPHA);
System.out.println(">> " + TestEnum.BETA);
System.out.println(">> " + TestEnum.GAMMA);

TestEnum a = TestEnum.fromString("Alpha");
TestEnum b = TestEnum.fromString("Beta");
TestEnum c = TestEnum.fromString("Gamma");

System.out.println(">> " + a);
System.out.println(">> " + b);
System.out.println(">> " + c);
}

}

输出显示使用大小写混合值而不是大写,表明正在使用我的字符串:

>>阿尔法
>> 测试版
>> Gamma
>> 阿尔法
>> 测试版
>> Gamma

请注意,我使用的是 Google Guava 库,因此我可以利用 BiMap。

关于java - 在 Java 中使用枚举或静态字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586418/

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