繁体   English   中英

在接口中作为通用参数枚举。 在默认实现中使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM