Java - 枚举值的返回类型

标签 java generics enums

大家好。我在返回枚举的内部枚举值时遇到问题。我不知道使用哪种返回类型。我尝试过谷歌搜索并找到了一些使用泛型的解决方案,但是我仍然没有运气。我不知道我的问题是否有解决方案,或者我可能做了一个糟糕的设计。所以,下面是这样的 是我的枚举。

public enum KEYS
{
    A("value"),
    B("value"),
    C("value");

    public enum KEYS_GROUP_A
    {
        ITEM_A ("value"),
        ITEM_B ("value"),
        ITEM_C ("value");

        private String value;
        private KEYS_GROUP_A( String _value )
        {
            value = _value;
        }

        public String getVal()
        {
            return value;
        }
    }

    public enum KEYS_GROUP_B
    {
        ITEM_A ("value"),
        ITEM_B ("value"),
        ITEM_C ("value");

        private String value;
        private KEYS_GROUP_B( String _value )
        {
            value = _value;
        }

        public String getVal()
        {
            return value;
        }
    }

    public enum KEYS_GROUP_C
    {
        ITEM_A ("value"),
        ITEM_B ("value"),
        ITEM_C ("value");

        private String value;
        private KEYS_GROUP_C( String _value )
        {
            value = _value;
        }

        public String getVal()
        {
            return value;
        }
    }

    private String value;
    private PROPERTY_KEYS(String _value)
    {
        value = _value;
    }

    public String getVal()
    {
        return value;
    }

    public <?> getEnumValues(int x)
    {
        if ( 0 == x )
        {
            return KEYS.KEYS_GROUP_A.values();
        }
        else if ( 1 == x )
        {
            return KEYS.KEYS_GROUP_B.values(); 
        }
        else
        {
            return KEYS.KEYS_GROUP_C.values();
        }
    }
}

我想做的是getEnumValues()方法。我尝试过返回类型 <T extends Enum<T>> T但仍然出现错误。请告诉我我的设计是否不好或者不应该这样做。请注明一些引用资料。我愿意阅读和学习。请透露一些信息!提前致谢!

最佳答案

您可以返回的最具体类型是

public Enum<?>[] getEnumValues(int x)

如果定义如下接口(interface),则可以返回更“有用”的类型:

interface HasVal { String getVal(); }

然后让你的枚举全部实现该接口(interface),例如:

public enum KEYS_GROUP_A implements HasVal {
  // ...

  @Override public String getVal() { return value; }
}

然后就可以返回了

public HasVal[] getEnumValues(int x)

并能够在实例上调用 getVal 方法:

for (HasVal val : getEnumValues(x)) {
  System.out.println(val.getVal());
}
<小时/>

您不能使用:

public <T extends Enum<T>> T[] getEnumValues(int x)

因为这对于一般的T来说是不能满足的。例如,我可以定义:

enum Blah {}

然后尝试调用:

Blah[] blah = getEnumValues(1);

这不是类型安全的,因为至少有一个(实际上是所有)代码路径返回一个与 Blah[] 不协变的值。

关于Java - 枚举值的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693931/

相关文章:

java - Java 支持运算符重载吗?

java - 如何声明和实例化一个新的通用数组?

c# - 具有 "has property X"约束的通用函数?

c++ - std::vector<Bar> 作为 Foo 类中的成员变量需要 Bar 的空构造函数

c++ - char 初始化枚举的基础类型应该是什么?

Java 没有绘制所需的图形

java - 通过意向设置窗口打开 Google TTS

java - 为什么 myEnum.ONE 不等于 myEnum.ONE.toString()?

java - 如何使用索引调试每个循环?

java - 给定泛型类型参数,如何调用相应的方法?