将字符串转换为枚举?

发布于 2024-08-12 15:42:41 字数 752 浏览 2 评论 0原文

您好,我在尝试概括我为特定枚举编写的函数时遇到了麻烦:

public static enum InstrumentType {
    SPOT {
        public String toString() {
            return "MKP";
        }
    },
    VOLATILITY {
        public String toString() {
            return "VOL";
        }
    };

    public static InstrumentType parseXML(String value) {
        InstrumentType ret = InstrumentType.SPOT;

        for(InstrumentType instrumentType : values()) {
            if(instrumentType.toString().equalsIgnoreCase(value)) {
                ret = instrumentType;
                break;
            }
        }

        return ret;
    }
} 

我希望向代表任何枚举的函数添加一个新参数。我知道我应该使用模板,但我不能在函数代码中使用函数“values()”。 基本上我想要的是一个使用我定义的 toString() 值的 valueOf 函数。

提前致谢。

Hi I'm having trouble trying to generalize a function I've written for an specific enum:

public static enum InstrumentType {
    SPOT {
        public String toString() {
            return "MKP";
        }
    },
    VOLATILITY {
        public String toString() {
            return "VOL";
        }
    };

    public static InstrumentType parseXML(String value) {
        InstrumentType ret = InstrumentType.SPOT;

        for(InstrumentType instrumentType : values()) {
            if(instrumentType.toString().equalsIgnoreCase(value)) {
                ret = instrumentType;
                break;
            }
        }

        return ret;
    }
} 

I wish to add a new parameter to the function that will represent any enum. I know I'm supposed to use templates but I can't use the function "values()" then inside the function code.
Basicly what I want is a valueOf function that uses the toString() value I've defined.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

韬韬不绝 2024-08-19 15:42:41

尝试一种更简洁的方式来编写枚举:

public static enum InstrumentType {

    SPOT("MKP"),
    VOLATILITY("VOL");

    private final String name;

    InstrumentType(String name)
    {
        this.name = name;
    }

    public String toString()
    {
        return this.name;
    }

    public static InstrumentType getValue(String s)
    {
        for (InstrumentType t : InstrumentType.values())
        {
            if (t.toString().equals(s))
                return t;
        }
        return SOME_DEFAULT_VALUE;
    }
}

这也解决了您的 String -> 问题枚举。仅使用三个字母的首字母缩略词作为枚举名称可能会更清晰,但如果您需要根据其他参数做出 getValue() 决定,这是正确的方法。

Try a much cleaner way of writing your enum:

public static enum InstrumentType {

    SPOT("MKP"),
    VOLATILITY("VOL");

    private final String name;

    InstrumentType(String name)
    {
        this.name = name;
    }

    public String toString()
    {
        return this.name;
    }

    public static InstrumentType getValue(String s)
    {
        for (InstrumentType t : InstrumentType.values())
        {
            if (t.toString().equals(s))
                return t;
        }
        return SOME_DEFAULT_VALUE;
    }
}

This also solves your problem of String -> Enum. It might be cleaner to just use the three-letter acronyms as the enum name, but in the case you will need to make the getValue() decision according to other parameters, this is the right way to go.

你げ笑在眉眼 2024-08-19 15:42:41

我相信枚举可以实现接口,因此您可以使用 value() 方法定义一个接口,然后将其用作参数类型。

但正如评论者所说,如果您将枚举命名为 MKP、VOL 等,可能会更容易

I believe that Enums can implement interfaces, so you could define one with a values() method and then use that as your parameter type.

But as the commenter said, it would probably be easier if you named your enums MKP, VOL etc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文