Как сослаться на параметризованный конструктор в Котлине?

Итак, у меня есть такое определение:

          sealed interface ParseResult<out R> {
        data class Success<R>(val value: R) : ParseResult<R>
        data class Failure(val original: String, val error: Throwable) : ParseResult<Nothing>
    }

Я хочу обернуть определенные элементы в файл Success. И я знаю, что могу сделать это так...

          list.map{ParseResult.Success(it)}

Но есть ли способ использовать ссылку на конструктор?

         list.map(ParseResult::Success) //this won't compile

1 ответ

Вы можете использовать ссылку на конструктор, если добавите import:

      import somepackage.ParseResult.Success

Или даже typealias:

      typealias Success<R> = ParseResult.Success<R>

Затем вы можете сделать:

      list.map(::Success)

Идея здесь состоит в том, чтобы сделать ParseResult.Successссылаться по простому имени.

Не в состоянии сделать ParseResult::Successхотя мне это кажется ошибкой. Сравнивать:

      class Outer {
    class Nested
}
class OuterGeneric<T> {
    class Nested
}

fun main() {
    val x = Outer::Nested // works
    val y = OuterGeneric::Nested // error
}
Другие вопросы по тегам