You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何从对象值创建枚举?以StandardCharsets为例

可行,你的代码存在两个语法问题:
  1. 枚举常量命名不符合Java规范,不能用StandardCharsets.ISO_8859_1这种带.的写法,枚举常量必须是合法的Java标识符(仅支持字母、数字、下划线,且不能以数字开头)。
  2. 你定义了需要传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:20:22