簡體   English   中英

檢查 Kotlin 中密封 class 的所有子類

[英]Check through all subclasses of a sealed class in Kotlin

我有一個密封的 class 包含球作為對象,用於台球游戲。 在代碼的其他地方,我使用了 BallType,它是一個枚舉類。 我希望能夠在需要時通過提供球類型來獲得球 object。 有沒有辦法做到這一點?

enum class BallType { NOBALL, WHITE, RED, YELLOW, GREEN, BROWN, BLUE, PINK, BLACK, COLOR, FREE }

sealed class Ball(
    val BallType: BallType,
    val points: Int,
    val foulPoints: Int
) {
    object NOBALL: Ball(BallType.NOBALL, 0, 0)
    object WHITE: Ball(BallType.WHITE, 4, 4)
    object RED: Ball(BallType.RED, 1, 4)
    object YELLOW: Ball(BallType.YELLOW, 2, 4)
    object GREEN: Ball(BallType.GREEN, 3, 4)
    object BROWN: Ball(BallType.BROWN, 4, 4)
    object BLUE: Ball(BallType.BLUE, 5, 5)
    object PINK: Ball(BallType.PINK, 6, 6)
    object BLACK: Ball(BallType.BLACK, 7, 7)
    object COLOR: Ball(BallType.COLOR, 7, 7)
    object FREE: Ball(BallType.FREE, 1, 4)
}

fun getBall(ballType: BallType) : Ball {
    // I am stuck here
}

這可以通過使用枚舉來大大簡化。 由於所有Ball子類都是無狀態的,因此它們是多余的。 所以你可以像這樣設置你的枚舉:

enum class Ball(
    val points: Int,
    val foulPoints: Int
) {

    NO_BALL(0, 0),
    ...
}

但是,要回答您的具體問題,不可能簡潔地做到這一點(並且沒有反思),您必須手動完成:

return when (ballType) {

    NO_BALL -> Ball.NoBall
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM