Así que tengo esta definición:
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> }Quiero envolver ciertos elementos en un Éxito. Y sé que puedo hacerlo así...
list.map{ParseResult.Success(it)}Pero, ¿hay alguna manera de usar una referencia de constructor?
list.map(ParseResult::Success) //this won't compilePuede usar una referencia de constructor si agrega una import :
import somepackage.ParseResult.SuccessO incluso un typealias:
typealias Success<R> = ParseResult.Success<R>Entonces puedes hacer:
list.map(::Success) La idea aquí es hacer que ParseResult.Success se pueda referir con un nombre simple.
Sin embargo, no poder hacer ParseResult::Success me parece un error. Comparar:
class Outer { class Nested } class OuterGeneric<T> { class Nested } fun main() { val x = Outer::Nested // works val y = OuterGeneric::Nested // error }