什么是Kotlin与C#中的标志枚举变量具有类似效果的方式

Dam*_*les 6 kotlin

在C#中,我可以做到这一点.

[Flags]
enum BeerProperty
{
    Bold = 1,
    Refreshing = 2
}

static void Taste(BeerProperty beer)
{
    if (beer == (BeerProperty.Bold | BeerProperty.Refreshing))
    {
        Debug.WriteLine("I can't qutie put my finger on...");
    }
}

static void Main(string[] args)
{
    var tickBeer = BeerProperty.Bold | BeerProperty.Refreshing;
    Taste(tickBeer);
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin,似乎我不能"或"两个旗帜.Kotlin的做法是什么?使用枚举变量列表?

enum class BeerProperty(value:Int)
{
    Bold(1),
    Refreshing(2)
}

fun taste(beer:BeerProperty)
{
    if(beer == (BeerProperty.Bold | BeerProperty.Refreshing))
    {
        print("I can't qutie put my finger on...");
    }
}

fun main(args: Array<String>)
{
    val tickBeer = BeerProperty.Bold | BeerProperty.Refreshing;
    taste(tickBeer);
}
Run Code Online (Sandbox Code Playgroud)

补充:感谢您的回答(由于时间限制,我无法将其标记为答案).我修改了下面的代码并实现了我想要的.

fun taste(beer: EnumSet<BeerProperty>)
{
    if(beer.contains(BeerProperty.Bold) && beer.contains(BeerProperty.Refreshing))
    {
        print("I can't qutie put my finger on...");
    }
}

fun main(args: Array<String>)
{
    val tickBeer = EnumSet.of(BeerProperty.Bold, BeerProperty.Refreshing);
    taste(tickBeer);
}
Run Code Online (Sandbox Code Playgroud)

jrt*_*ell 12

使用扩展功能

import java.util.*

enum class BeerProperty
{
    BOLD,
    REFRESHING,
    STRONG;

    infix fun and(other: BeerProperty) = BeerProperties.of(this, other)
}

typealias BeerProperties = EnumSet<BeerProperty>

infix fun BeerProperties.allOf(other: BeerProperties) = this.containsAll(other)
infix fun BeerProperties.and(other: BeerProperty) = BeerProperties.of(other, *this.toTypedArray())

fun taste(beer: BeerProperties) {
    if(beer allOf (BeerProperty.BOLD and BeerProperty.REFRESHING and BeerProperty.STRONG)) {
        print("I can't qutie put my finger on...")
    }
}

fun main(args: Array<String>) {
    val tickBeer = BeerProperty.BOLD and BeerProperty.REFRESHING and BeerProperty.STRONG
    taste(tickBeer)
}
Run Code Online (Sandbox Code Playgroud)

我使用扩展函数来允许使用和添加属性,并使用 allof 来检查所有标志的设置。


yol*_*ole 5

实际上,在 Kotlin 中,每个枚举常量都是对应于该枚举的类的一个实例,并且您不能使用 'OR' 来组合多个 clas 实例。如果您需要跟踪多个枚举值,最有效的方法是使用EnumSet 类