首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用“OR”来实现枚举案例?

如何使用“OR”来实现枚举案例?
EN

Stack Overflow用户
提问于 2020-12-17 18:31:21
回答 4查看 68关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
enum class Items {
  ITEM_1,
  ITEM_2,
}

我想补充一句:

  • AT_LEAST_ONE,在某种程度上等于ITEM_1 or ITEM_2
  • ALL,意思是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)

在科特林有办法吗?

EN

Stack Overflow用户

发布于 2020-12-18 06:43:21

您可以尝试将抽象函数添加到枚举类中,以满足额外条件。

我试着这样做:

代码语言:javascript
运行
复制
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>
    }
}

这个枚举类的用法如下:

代码语言:javascript
运行
复制
    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}")
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65346419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档