gpt4 book ai didi

Java - 枚举值的返回类型

转载 作者:行者123 更新时间:2023-12-01 21:38:29 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com