Java - 直接将ENUM1转换为ENUM2

时间:2014-04-22 13:47:04

标签: java enums java-7

我想知道是否可以使用方法(直接)将ENUM1转换为ENUM2:

public enum BusinessUnit {
    ONE( "ONE" ),
    TWO( "TWO" ),
}

public enum BUSINESS_UNIT {
        ONE,
        TWO,
}

然后:

BusinessUnit bu = BusinessUnit.valueOf("ONE");
BUSINESS_UNIT bu2 = bu;

有可能吗?

更新:

我不想创建任何转换方法,我想知道是否:

  • 可能
  • 可能的SDK版本

再次感谢...

4 个答案:

答案 0 :(得分:2)

或者,只需使用实例

public enum BusinessUnit {
    ONE( BUSINESS_UNIT.ONE ),
    TWO( BUSINESS_UNIT.TWO );

    private final BUSINESS_UNIT unit;

    BusinessUnit(BUSINESS_UNIT unit) {
        this.unit = unit;
    }

    public BUSINESS_UNIT getUnit()
    {
        return unit;
    }
}

public enum BUSINESS_UNIT {
        ONE,
        TWO,
}

并获取它:BusinessUnit.(ONE/TWO).getUnit()将返回BUSINESS_UNIT ONE/TWO

  

我不想创建任何转换方法,

     

我想知道是否:

     

可能

     

可能的SDK版本

没有。 BusinessUnitenumBUSINESS_UNIT是另一个enum。它们没有任何共同点,你不能在不使用方法的情况下从一个传递到另一个。

答案 1 :(得分:0)

您好,您可以通过以下方式执行此操作

static BUSINESS_UNIT BUSINESS_UNITTOBusinessUnit(BusinessUnit value) {
    return BUSINESS_UNIT.values()[value.ordinal()];
}

答案 2 :(得分:0)

您可以使用接口执行类似的操作:

public interface BusinessUnitName {
    public String name();
}

public enum BusinessUnit implements BusinessUnitName {
    ONE,
    TWO,
}

public enum BUSINESS_UNIT implements BusinessUnitName {
    ONE,
    TWO,
}

....

BusinessUnitName bu = BusinessUnit.valueOf("ONE");
BusinessUnitName bu2 = bu;
System.out.println(bu2.name());

接口声明代表业务单位的对象所需的最低限度。这两个枚举类实现了该接口(枚举已经实现了一个名为name()的函数)。与业务部门有关的代码应该坚持使用BusinessUnitName接口。它不应该过于密切关注BusinessUnitName个对象,看看它们是如何实际实现的。

答案 3 :(得分:0)

您必须调用方法,但您既不必定义新方法,也不必定义 interfaces 。如果我理解正确,您希望通过匹配名称从一个枚举类型转换为另一个:

public class ConversionTest {
    enum BusinessUnit {
        ONE, TWO
    }
    enum BUSINESS_UNIT {
        ONE, TWO
    }
    @Test public void convert_BUSINESS_UNIT_to_BusinessUnit() {
        assertEquals(BusinessUnit.ONE, BusinessUnit.valueOf(BUSINESS_UNIT.ONE.name()));
    }
    @Test public void convert_BusinessUnit_to_BUSINESS_UNIT() {
        assertEquals(BUSINESS_UNIT.ONE, BUSINESS_UNIT.valueOf(BusinessUnit.ONE.name()));
    }
}