首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合枚举值

集合枚举值
EN

Stack Overflow用户
提问于 2015-03-09 23:47:03
回答 2查看 60关注 0票数 0

我有一个枚举类,它的值是A,B。下面是这个类:

代码语言:javascript
复制
@XmlType(name = "MemberType")
@XmlEnum
public enum MemberType {
    A,
    B;
    public String value() {
        return name();
    }

    public static MemberType fromValue(String v) {
        return valueOf(v);
    }
}

我有另一个类似于这个类的枚举类,它具有相同的值A和B。这个类是从我的WSDL生成的,我无法控制它的代码。我主要想做的是,把这两个枚举值相等。

基本上说,MemberType.A = WSDLClass.A,类似的东西。接下来我能试试什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 00:06:53

虽然不能将一个枚举类型分配给另一个类型(和你不能让枚举扩展一些抽象的超类),但是可以声明一个静态方法(无论是在MemberType中还是在某些实用程序类中),从WSDLClass映射到MemberType

代码语言:javascript
复制
public static MemberType fromWsdl(WSDLClass w) {
    if (w==null) {
      return null;
    } else {
      switch (w) {
         case WSDLClass.A: return MemberType.A;
         case WSDLClass.B: return MemberType.B;
         default: return null;
      }
    }
}

然后,您将按照以下方式使用该函数:

代码语言:javascript
复制
import static xyz.MemberType.fromWsdl;
...
MemberType m = ...;
WSDLClass w = ...;
if (m.equals(fromWsdl(w))) ...
票数 1
EN

Stack Overflow用户

发布于 2015-03-10 00:07:21

如果名称严格相同,我想您可以:

代码语言:javascript
复制
private MemberType convertEnum(WSDLClass type) {
    return Enum.valueOf(MemberType.class, type.name());
}

如果名称不完全相同,或者将来可能会有所不同,那么您将不得不这样做:

代码语言:javascript
复制
private MemberType convertEnum(WSDLClass type) {
    MemberType memberType;
    switch (type) {
    case A:
        memberType = MemberType.A;
        break;
    case B:
        memberType = MemberType.B;
        break;
    default:
        memberType = null;
        break;
    }
    return memberType;
}

如果您想使用第一种解决方案,但是如果类型为null,它会抛出NullPointerException,那么可以使用Apache中的EnumUtils

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28953790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档