我想打印第二个索引值,即SUMMER.
public class Filer
{
public enum Season { WINTER, SPRING, SUMMER, FALL }
public static void main(String[] args)
{
System.out.println(Season.values(2));//values don't take argument!!
}
}
Run Code Online (Sandbox Code Playgroud)
怎么能实现呢?
你的代码几乎可以工作 仔细查看Enum#values(文档)的方法签名.
它不是接受参数的方法,它返回整个数组.所以你需要在方法之后将访问权限转移为数组访问:
Season.values()[2]
Run Code Online (Sandbox Code Playgroud)
您应该避免Enum通过索引访问.它们取决于代码中的顺序.如果你做一些重构,比如"按字母排序项目":
public enum Season {
FALL, // 3 -> 0
SPRING, // 1 -> 1
SUMMER, // 2 -> 2
WINTER // 0 -> 3
}
Run Code Online (Sandbox Code Playgroud)
或更高一些值添加到您的枚举,无需记住您的订单依赖的代码,那么你会破坏你的代码.相反,您可以设置Map<Integer, Season>:
Map<Integer, Season> indexToSeason = new HashMap<>();
indexToSeason.put(0, Season.WINTER);
indexToSeason.put(1, Season.SPRING);
indexToSeason.put(2, Season.SUMMER);
indexToSeason.put(3, Season.FALL);
Run Code Online (Sandbox Code Playgroud)
然后使用该地图进行访问:
public Season getSeasonByIndex(int index) {
return indexToSeason.get(index);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |