Как сослаться на параметризованный конструктор в Котлине?
Итак, у меня есть такое определение:
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
}