在enum中引用enum

时间:2015-03-18 09:09:35

标签: java enums

如果,

enum Things{
   UNIQUE_THING,
   NON_UNIQUE_THINGS; // Need to specify what n0n-unique things as a separate enum
}

enum NonUniqueThings {
   THING_1,
   THING_2;
}

有没有办法只引用一个枚举Things并在其中指定NonUniqueThings的行为?我的意思是,来电者可以像 -

一样打电话
Things.UNIQUE_THING 

Things.NON_UNIQUE_THING.THING_1

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您可以为Things引入一个可为空的参数,该参数将保留一些NonUniqueThings值。当然,您必须为Things提供一个构造函数,并为param提供一个getter,以便获取NonUniqueThings值。

请注意,我假设UNIQUE_THING不会绑定到某些NonUniqueThing,这就是为什么它以null为参数进行实例化的原因

enum Things{
   UNIQUE_THING(null),
   NON_UNIQUE_THINGS(NonUniqueThings.THING_1);

   NonUniqueThings param;

   Things(NonUniqueThings param) {
       this.param = param;
   }

   public NonUniqueThing getNonUniqueThing() {
       return param;
   }
}

然后,您可以获取绑定到每个NonUniqueThings值的Things值,如下所示:

NonUniqueThings nonUniqueThing = Things.NON_UNIQUE_THING.getNonUniqueThing();

答案 1 :(得分:2)

这样的事情?没有非常好的解决方案,它应该工作。

enum Things {
        UNIQUE_THING,
        NON_UNIQUE_THING(
            NonUniqueThings.A,
            NonUniqueThings.C);

    public final Child[] childs;

    private Things() {
        this.childs = null;
    }

    private Things(Child... childs) {
        this.childs = childs;
    }
}

interface Child {
    //
}

enum NonUniqueThings implements Child {
    A,
    B,
    C;
}

答案 2 :(得分:1)

在这里(如果我已正确理解您的需要):

public enum Things {
    UNIQUE_THING, NON_UNIQUE_THINGS;

    public enum NonUniqueThings {
        THING_1, THING_2;
    }
}

可以像:

一样访问
Things.NonUniqueThings.THING_1