Kotlin: ошибка: неразрешенная ссылка для метода внутри запечатанного класса - PullRequest
0 голосов
/ 27 февраля 2020

Этот небольшой код дает ошибка: неразрешенная ссылка: make :

sealed class Color () {
    object Red : Color()
    object Blue : Color()

   override fun toString(): String =
       when (this) {
           is Red -> "Red"
           is Blue -> "Blue"
       else -> "Error"
       }

   fun make(name: String): Color {
       return when (name) {
           "Red" -> Red 
           "Blue" -> Blue
       else -> throw Exception ("Error unkown color '$name'") 
       }
   }
}   

fun main(args: Array<String>) {
    val color = Color.make("Red")
    println (color.toString())
}

Я попытался val color = make ("Red") и получил то же самое ошибка. Почему ? Что я должен сделать, чтобы это исправить?

1 Ответ

2 голосов
/ 27 февраля 2020

Поместите функцию в объект-компаньон:

sealed class Color() {
    object Red : Color()
    object Blue : Color()

    override fun toString(): String = when (this) {
        is Red -> "Red"
        is Blue -> "Blue"
        else -> "Error"
    }

    companion object {
        fun make(name: String): Color = when (name) {
            "Red" -> Red
            "Blue" -> Blue
            else -> throw Exception("Error unkown color '$name'")
        }
    }
}

Kotlin Детская площадка

...