我有以下代码:
enum class Items {
ITEM_1,
ITEM_2,
}我想补充一句:
AT_LEAST_ONE,在某种程度上等于ITEM_1 or ITEM_2ALL,意思是ITEM_1 and ITEM_2用例1:当我使用if (item == Items.AT_LEAST_ONE)时,它希望它实际上是指if (item == Items.ITEM_1 || item ==Items.ITEM_2)
用例2:当我在函数中使用它们作为参数时:calling_function(ALL)而不是calling_function( Items.ITEM_1,Items.ITEM_2)
在科特林有办法吗?
发布于 2020-12-18 06:43:21
您可以尝试将抽象函数添加到枚举类中,以满足额外条件。
我试着这样做:
enum class Items {
ITEM_1 {
override fun calculate(item: Items): Boolean = item == ITEM_1
},
ITEM_2 {
override fun calculate(item: Items): Boolean = item == ITEM_2
},
//AT_LEAST_ONE only for check
AT_LEAST_ONE {
override fun calculate(item: Items): Boolean = item == ITEM_1 || item == ITEM_2
},
//ALL only for check
ALL {
override fun calculate(item: Items): Boolean = item == ITEM_1 && item == ITEM_2
};
abstract fun calculate(item:Items): Boolean
enum class GetItem{
ALL{
override fun get(): List<Items> {
return listOf(ITEM_1,ITEM_2)
}
};
abstract fun get(): List<Items>
}
}这个枚举类的用法如下:
Log.e("ENUM TEST", "TEST ITEM_1 : (item == ITEM_1) ${Items.ITEM_1 == Items.ITEM_1}")
Log.e("ENUM TEST", "TEST ITEM_2 : (item == ITEM_2) ${Items.ITEM_2 == Items.ITEM_2}")
Log.e("ENUM TEST", "TEST AT_LEAST_ONE : (item == AT_LEAST_ONE) ${Items.AT_LEAST_ONE.calculate(Items.ITEM_1)}")
Log.e("ENUM TEST", "TEST ALL : (item == ALL) ${Items.ALL.calculate(Items.ITEM_1)}")
Log.e("ENUM TEST", "TEST ALL : (ALL == ALL) ${Items.ALL == Items.ALL}")
Log.e("ENUM TEST", "TEST ALL : (ALL == listOf(ITEM_1, ITEM_2) ${Items.GetItem.ALL.get().size}")https://stackoverflow.com/questions/65346419
复制相似问题