4

所以我有这个定义:

    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
4

1 回答 1

3

如果添加一个,则可以使用构造函数引用import

import somepackage.ParseResult.Success

甚至是类型别名:

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
}
于 2022-01-18T17:05:38.267 回答