Java中如何从对象值创建枚举?以StandardCharsets为例
可行,你的代码存在两个语法问题:
- 枚举常量命名不符合Java规范,不能用
StandardCharsets.ISO_8859_1这种带.的写法,枚举常量必须是合法的Java标识符(仅支持字母、数字、下划线,且不能以数字开头)。 - 你定义了需要传入String参数的构造方法,但枚举常量声明时未传递对应参数,导致语法报错。
正确实现方式一:关联Charset实例
如果需要直接在枚举中持有对应的Charset对象,可使用此方案:
import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public enum CharsetEnum { ISO_8859_1(StandardCharsets.ISO_8859_1), US_ASCII(StandardCharsets.US_ASCII), UTF_16(StandardCharsets.UTF_16), UTF_16BE(StandardCharsets.UTF_16BE), UTF_16LE(StandardCharsets.UTF_16LE), UTF_8(StandardCharsets.UTF_8); private final Charset charset; CharsetEnum(Charset charset) { this.charset = charset; } public Charset getCharset() { return charset; } // 如需获取字符集名称,可添加此方法 public String getLabel() { return charset.name(); } }
此实现中,枚举常量使用与StandardCharsets字段一致的合法名称,构造方法接收Charset类型参数并传入对应实例,兼顾了枚举特性与Charset对象的直接操作能力。
正确实现方式二:仅保存字符集名称
如果只需要存储字符集的名称字符串,可使用此方案:
public enum CharsetEnum { ISO_8859_1("ISO-8859-1"), US_ASCII("US-ASCII"), UTF_16("UTF-16"), UTF_16BE("UTF-16BE"), UTF_16LE("UTF-16LE"), UTF_8("UTF-8"); private final String label; CharsetEnum(String label) { this.label = label; } public String getLabel() { return label; } // 可选:根据名称反向查找枚举实例 public static CharsetEnum fromName(String name) { for (CharsetEnum value : values()) { if (value.label.equals(name)) { return value; } } throw new IllegalArgumentException("未知字符集名称: " + name); } }
内容的提问来源于stack exchange,提问作者splunk
相关产品推荐
相关产品推荐

