我想在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类型的参数