通用Enum.valueOf方法:参数中的Enum类,并返回Enum项目 [英] generic Enum.valueOf method : Enum class in parameter and return Enum item

查看:79
本文介绍了通用Enum.valueOf方法:参数中的Enum类,并返回Enum项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想制作一个在传入参数的任何Enum类上实现 valueOf 的方法(并包装一些特殊的错误/缺失名称代码).所以基本上,我有几个枚举,例如:

I'd like to make a method that implement valueOf on any Enum class passed in parameter (and also wrap some specialized error/missing-name code). So basically, I have several Enum such as:

enum Enum1{ A, B, C }
enum Enum2{ D, E, F }

我想要一个环绕 valueOf 的方法.我找不到直接在参数中传递Enum类的方法,可以在该参数上调用 valueOf .这是我想出的:

And I want a method that wrap around valueOf. I could not find a way to directly pass an Enum class in parameter on which I could call valueOf. Here is what I came up with:

private static Enum getEnum(Class<Enum> E, String name){
    for(Enum e: E.getEnumConstants())
        if(e.name().equals(name)){
            return e;
        }
    return null;
}

我想用以下方式致电: getEnum(Enum1,"A").但它不喜欢它:

Which I want to call with: getEnum(Enum1,"A"). But it does not like it:

java: cannot find symbol
  symbol:   variable Enum1
  location: class Main

推荐答案

为什么可以使用Java自己的实现来实现自己的?

Why implement your own, when you can use Java's own implementation for this?

 YourEnum yourEnum = Enum.valueOf(YourEnum.class, value);

http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,%20java.lang.String)

您的方法将变为:

private static <E extends Enum<E>> E getEnum(Class<E> enumClass, String name){
    try {
        return Enum.valueOf(enumClass, name);
    } catch(IllegalArgumentException e) {
        return null;
    }
}

,您可以通过以下方式调用它:

and you can call it with:

getEnum(Enum1.class, "A")

这篇关于通用Enum.valueOf方法:参数中的Enum类,并返回Enum项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆