美好的一天SO人。我有关于返回枚举的内部枚举值的问题。我不知道要使用哪种返回类型。我试过谷歌搜索并碰到了一些使用仿制药的解决方案但是,我仍然没有运气。我不知道我的问题是否有解决方案,或者我的设计可能不好。所以这里,下面 是我的枚举。
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
,但仍然发生错误。请告诉我的设计是不好还是不应该做。请说明一些参考资料。我愿意阅读和学习。请轻松一点!提前谢谢!
答案 0 :(得分:3)
您可以返回的最具体类型是
java.exe
如果您定义如下界面,则可以返回更“有用”的类型:
public Enum<?>[] getEnumValues(int x)
然后让你的枚举全部实现该接口,例如:
interface HasVal { String getVal(); }
然后你可以返回
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);
不协变的值。