我有一个字符串数组,其中包含从用户获取的枚举值.我现在如何将此字符串数组转换为枚举数组,以便可以迭代元素并在其他方法中进一步使用?这需要用Java完成.
基本上我要问的是,例如,如果我有这个数组
String [] names = {"Autumn", "Spring", "Autumn", "Autumn" };
Run Code Online (Sandbox Code Playgroud)
我有这个枚举
enum Season
{
Autumn, Spring;
}
Run Code Online (Sandbox Code Playgroud)
我现在如何将上面的String类型数组转换为枚举季节类型的数组?
这是一个完整的代码示例:
private static List<Season> foo(List<String> slist) {
List<Role> list = new ArrayList<>();
for (String val : slist) {
list.add(Season.valueOf(val));
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你想制作一个可以为任何枚举执行此操作的通用方法,它会变得有点过时.你必须使用"通用方法":
private static <T extends Enum<T>> List<T> makeIt(Class<T> clazz, List<String> values) {
List<T> list = new ArrayList<>();
for (String level : values) {
list.add(Enum.valueOf(clazz, level));
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
您必须按如下方式调用此方法:
List<Strings> slist = ....
List<Season> elist= makeIt(Season.class, slist);
Run Code Online (Sandbox Code Playgroud)
像这样:来自这里的代码
public enum Weekdays {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Run Code Online (Sandbox Code Playgroud)
如果您需要进行查找,您可以执行以下操作:
Weekdays weekday = Weekdays.valueOf("Monday");
System.out.println(weekday);
Run Code Online (Sandbox Code Playgroud)
但要小心,IllegalArgumentException如果提供的String不存在,这将抛出.
回答实际问题:
public <T extends Enum<T>> T[] toEnums(String[] arr, Class<T> type)
{
T[] result = (T[]) Array.newInstance(type, arr.length);
for (int i = 0; i < arr.length; i++)
result[i] = Enum.valueOf(type, arr[i]);
return result;
}
Season[] seasons = toEnums(names, Season.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16027 次 |
| 最近记录: |