获取没有toString()的枚举字符串

时间:2012-01-06 10:16:41

标签: java enumeration

如果我有这样的话:

public enum Collection {
    Name, Type, All
}

我也想将字符串用于字符串。我可以说Collection.Name.toString - 没关系。但我想在没有.toString的情况下这样做。有一个简单的解决方案吗?我看到了很多东西,但它们对于switch或者有很多if来说太大了。没有其它的方法?谢谢!

编辑:Collection.something.name()的解决方案很不错。但是有另一种方法来获取Collection.something的字符串吗?

5 个答案:

答案 0 :(得分:9)

使用Enum的name()方法:

Collection.Name.name()
Collection.Type.name()
// etc

编辑:

我不知道这是否是一个有效的解决方案,但这也可行:

Collection.Name + ""

答案 1 :(得分:2)

看起来你正在搜索像

一样
enum Collection {
    Name("name"), Type("type"), All("all");
    String id;

    Collection(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

enum Collection2 {
    Name, Type, All;
    private static final Map<Collection2, String> ids;

    static {
        ids = new HashMap<Collection2, String>();
        ids.put(Name, "name");
        ids.put(Type, "type");
        ids.put(All, "all");
        //here can be sam validation on id's uniq
    }

    public String getId() {
        return ids.get(this);
    }
}

答案 2 :(得分:1)

您也可以使用name(),但归结为同样的事情。

这是一个事实,你会为你的程序添加一些额外的冗长(这正是Java需要的,额外的冗长),但是你的枚举的每个条目都是一个类型集合的对象的事实不会给你太多杠杆。 在某些情况下,您可以依赖于toString将被隐式调用的事实,但这是一种情境行为,而不是一种习惯。

答案 3 :(得分:1)

唯一可以避免的方法是构建一个String

"Collection type= " + Collection.Name.toString();
"Collection type= " + Collection.Name.name();
"Collection type= " + Collection.Name;

所有人都做同样的事情,因为它会为你调用.toString()

你可以做到

String text = "" + Collection.Name;

答案 4 :(得分:0)

这可能是一个奇怪的工作,但是如果我理解正确的话,可以使用带有String变量的接口来实现你的目标。 例如:

public interface myEnum {
    String Name = "Name";
    String Type = "Type";
    String All = "All";
}

然后,像你一样打电话:

if (myEnum.Name.equals("Name"))
    return true;

这可以避免将“toString()”附加到所有内容。