Enum作为Interface中的通用参数。在默认实施中使用

时间:2016-02-20 13:09:05

标签: java interface enums

您好我尝试传递给接口作为参数Enum对象,然后将其解析为身体默认功能界面中的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有可能吗?

1 个答案:

答案 0 :(得分:0)

步骤一步:

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[]一样不灵活。

将函数打包在接口中作为默认方法不会带来任何好处。

注意{1}}没有为枚举输入,并且会为非枚举产生Class.getEnumConstants

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