java - 接受任何枚举作为参数
问题描述
public static <E extends Enum<E>> List<E> enumHeadAsList(final Class<E> val, final E topValue)
{
// My code
}
我想创建一个接受我给出的任何枚举的方法,并设置该枚举的默认值以进行一些顺序检查,然后将所有值作为列表返回。基本上我想设置一个枚举的头并返回值。到目前为止,我设法做到了这一点,但我不知道如何继续。
我想调用以下方法,例如:
enumHeadAsList(BuffType.class, BuffType.SELF);
解决方案
这应该可以解决问题:
public static <E extends Enum<E>> List<E> enumHeadAsList(final E topValue)
{
E[] values = topValue.getDeclaringClass().getEnumConstants();
if (topValue.ordinal() != 0) {
E oldTop = values[0];
values[0] = topValue;
values[topValue.ordinal()] = oldTop;
}
return List.of(values);
}
此代码假定您不太关心剩余元素的顺序(因为顶部元素只是与先前的第一个元素交换)。
如果你想保持其他值的相对顺序不变,那么你必须调整if
用这个代码块替换上面的内容:
final int topValueIndex = topValue.ordinal();
if (topValueIndex != 0) {
System.arraycopy(values, 0, values, 1, topValueIndex);
values[0] = topValue;
}
请注意,如果不允许,Class<E>
则不需要专用参数,因为我们可以从中获取枚举类。topValue
null
topValue
如果使用 Java 9 之前的 Java 版本,那么您可以替换List.of()
为Arrays.asList()
结果List
是可变的。
推荐阅读
- kdb - 使用over副词对桌子进行操作
- javascript - 打字稿尝试更新我的对象中的布尔属性收到“TypeError:无法分配给只读属性”
- ios - 点击时如何调整 UIImageView 的大小?
- asp.net-mvc - asp.net mvc中的Excel导出和导入
- microsoft-teams - Microsoft Teams 连接器配置保存失败
- angular - ngdart 生成组件不生成 css 文件?
- node.js - 为什么闪存错误并非一直有效?
- mongodb - 如何将数据库移动到mongodb中的另一个分片
- python-3.x - Python - 浏览器在脚本完成之前关闭请求
- python - 在标签 data-reactid 上使用 python 从 espn 中提取数据