2016-02-20 98 views
1

你好我试试把接口作为参数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?

+0

试试吧,然后你就知道了。 – hotzst

+2

不,这是不可能的。使用EnumSet作为你如何做这种事情的例子。 –

回答

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

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

注意​​不是为Enum输入的,对于非枚举将产生null

(在一个特定的Enum,EnumSet(一种位集)和EnumMap的(一个类型的数组)住在往往是非常有效和快速的。)