java接受任何枚举作为参数
public static <E extends Enum<E>> List<E> enumHeadAsList(final Class<E> val, final E topValue)
{
// My code
}
我想创建一个接受我给出的任何枚举的方法,并设置该枚举的默认值,以执行一些顺序检查,然后将所有值作为列表返回。基本上我想要一个枚举的头和返回值。到目前为止,我成功地做到了这一点,但我不知道如何继续下去
我想调用如下方法:
enumHeadAsList(BuffType.class, BuffType.SELF);
# 1 楼答案
这应该可以做到:
这段代码假设您不太关心其余元素的顺序(因为顶部元素只需与之前的第一个元素交换)
如果希望保持其他值的相对顺序不变,则必须调整并用以下代码块替换上面的
if
:请注意,如果不允许
topValue
为null
,则不需要专用的Class<E>
参数,因为我们可以从topValue
获取枚举类如果使用Java 9之前的Java版本,那么可以将
List.of()
替换为Arrays.asList()
,不同之处在于生成的List
是可变的# 2 楼答案
EnumSet让这变得简单:
complementOf
返回除参数中存在的枚举值之外的所有枚举值的集合。所以,complementOf(EnumSet.of(topValue))是除topValue之外的所有值