2017-10-06 29 views
0

我试图做到以下几点:如何合并具有相同父接口的kotlin中的两组枚举?

val list = MyEnum1.values().filterIsInstance(MyParentInterface::class.java) 
     .plus(MyEnum2.values().filterIsInstance(MyParentInterface::class.java)) 

在Android工作室,皮棉抱怨filterIsInstance是“对集合类型无用的呼叫”。但是,如果我删除它,plus(MyEnum2.values()...不起作用,因为它们不是同一类型。

这是将两个枚举的值合并到一个列表中的正确方法吗?

编辑:我的枚举是这样的:

enum class MyEnum1 : MyParentInterface { 
    ENUM1_TYPE1, ENUM1_TYPE2 
} 
+0

我能得到周围的'{.MAP作为MyParentInterface}''替换的.filterIsInstance'问题,但它似乎仍然像不是最好的解决方案。 – ADev

+0

你可以发布你的枚举的定义吗? – FWeigl

+0

@Ascorbin当然。尽管他们没有什么特别的。 – ADev

回答

1

您可以显式声明的列表为MyParentInterface,然后只需添加您的枚举值。

val result = mutableListOf<MyParentInterface>() 
return result.plus(MyEnum1.values()) 
     .plus(MyEnum2.values()) 
+0

你声明了可变列表,而不是根本不改变它。 'plus'运算符创建一个新列表。 – Ilya

0

可以值数组转换成列表,然后将它们连接起来:

val sum: List<MyParentInterface> = MyEnum1.values().asList() + MyEnum2.values().asList() 
+0

这不起作用。它返回'List '而不是'List ' – ADev

+0

确实如此,似乎需要明确的类型说明,因为编译器无法确定它是否应该是'List '或'List >'。我已经更新了答案。 – Ilya