作者:张嘎777_282 | 来源:互联网 | 2022-11-28 20:47
我有一个enum作为String的描述.这是枚举.
public enum tabs
{
A("Actual data"),
B("Bad data"),
C("Can data"),
D("Direct data");
private String description;
tabs(String desc)
{
this.description = desc;
}
public String getDescription()
{
return this.description;
}
}
现在,如果我需要A的数据,我就是这么做的
tabs.A.description
我正在创建一个返回值的泛型方法.
我设法利用下面的泛型方法接受枚举类型作为参数.它返回枚举常量的数组.但我实际上希望它返回一个值数组..即{"实际数据","错误数据","可以数据","直接数据"}.
public static String[] getActualTabs(Class extends Enum>> e)
{
return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}
我有什么选择来实现这一目标?
1> Eran..:
您可以传递映射器Function
以将枚举常量映射到String
s:
public static > String[] getActualTabs(Class e, Function super T, String> mapper)
{
return Arrays.stream(e.getEnumConstants()).map(mapper).toArray(String[]::new);
}
用法:
System.out.println(Arrays.toString(getActualTabs(tabs.class,tabs::getDescription)));
输出:
[Actual data, Bad data, Can data, Direct data]
@ SteroidKing666使用映射器`Function`参数可以提供更大的灵活性.对于`tabs`,你想获得`getDescription()`的值.对于其他一些枚举,您可能希望获得不同属性的值(例如`getColor()`).如果你的`server`枚举也有`getDescription()`,你可以传递`server :: getDescription`.如果你只想支持`getDescription()`方法,你可以使用类似Mureinik的答案(即要求枚举实现一些接口).
@ SteroidKing666如果您担心必须在方法引用中指定枚举名称,则可以使用lambda表达式:将`tabs :: getDescription`替换为`e - > e.getDescription()`.这适用于任何具有返回`String`的`getDescription`方法的枚举.