2016-02-20 69 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的(一個類型的數組)住在往往是非常有效和快速的。)