在Kotlin中,是否可以为不同的对象设置不同的枚举值,就像Python处理枚举值的方式一样?

我想在Kotlin中创建一个颜色类,它采用RGB值。我还计划添加十六进制值,但这与问题无关。那我要上两节课。

data class RGB(val red: Int, val green: Int, val blue: Int)

RGB类仅存储三个整数。

class Color(rgb: RGB)

Color类仅存储RGB值。 (我这样做是因为我计划向Color添加一个除十六进制对象之外的辅助构造函数。)

我想拥有一个可以存储几种通用颜色的枚举,但是我希望枚举中的每个值实际上是一个颜色对象,而不仅仅是存储一种。我当前的Colors枚举如下。

enum class Colors(color: Color) {

    WHITE(Color(RGB(255,255,255))),
    //Some other colors
    BLACK(Color(RGB(0,0,0)));

}

我的问题是我无法将这些值传递给color参数或设置与它们相等的颜色对象(因为它们不是颜色,而只是存储它们)。

在Python中,对于枚举,您实际上可以将枚举值设置为对象,因此可以代替该类型的任何对象使用。我不记得确切的语法,但这有点像

class Colors(enum) {

    WHITE = Color(RGB(255,255,255)),
    //Some other colors
    BLACK = Color(RGB(0,0,0));

}

这样,如果我有一些方法的颜色类型为参数

//We've moved back into Kotlin
fun someMethod(color: Color) {
    //Color some stuff
}

我实际上可以从枚举中传递一个对象。

someMethod(Colors.WHITE)

我知道使用我当前的Kotlin枚举,我可以只调用Colors.WHITE.color,但是我只想知道是否可以用Python方式做到这一点。 “我的颜色”枚举仅是一个示例,但在其他用途​​中,更重要的是它。

TL; DR我希望能够通过将单个枚举值设置为等于对象来对它们使用多态。我希望能够通过将它们设置为等于X(parameters)的形式将它们传递给X类型的参数

评论