gpt4 book ai didi

java - 枚举作为接口(interface)中的通用参数。在默认实现中使用

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:36 25 4
gpt4 key购买 nike

您好,我尝试将参数 Enum 传递给接口(interface)对象,然后将其解析为 List<Enum>在body默认功能界面中。所以我的界面如下所示

public interface SpecificObject<T extends Enum<T>>{
default List<Enum> asMyList(){
List<Enum> list = Arrays.asList(T.values()); // not works
return list;
}
}

此后我就这样使用了飞机

class SomeObject implements SpecificObject<MyEnum>{
public SomeObject()
// dont' must Overwrite because I use as default
}

在代码使用的某个地方,如下所示

SpecificObject specificObject = new someObject SomeObject();
List<Enum> list = someObject.asMyList();

在JAVA 8中可以吗?

最佳答案

一步一步:

public static <T extends Enum<T>> List<T> getEnumConstants(T object) {
assert object != null;
Class<T> type = object.getClass();
T[] constants = type.getEnumConstants();
return Arrays.asList(constants);
}

未经测试,但这看起来可行。然而,该列表与原始 T[] 一样不灵活。

将函数封装在接口(interface)中作为默认方法不会带来任何优势。

注意 Class.getEnumConstants 不是针对枚举类型,对于非枚举将会产生 null

(当停留在一个特定的 Enum 中时,EnumSet(一种位集)和 EnumMap(一种数组)通常非常高效且快速。)

关于java - 枚举作为接口(interface)中的通用参数。在默认实现中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com