[英]Enum as Generic parameter in Interface. Use in default implementation
您好,我尝试传递给接口作为参数Enum
对象,然后将其解析为主体默认函数interface中的 List<Enum>
。 所以我的界面如下图所示
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[]
一样不灵活。
将函数打包为默认方法不会带来任何好处。
注意Class.getEnumConstants
没有为Enum键入,对于非枚举将产生null
。
(当停留在一个特定的Enum中时,EnumSet(一种位集)和EnumMap(一种数组)通常非常高效且快速。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.