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