函数在Kotlin中返回ad-hoc对象

Lor*_*one 2 kotlin

目前我有一个返回Pair<User, User>对象的私有函数.第一个用户是某个东西的发送者,第二个用户是该东西的接收者.

我认为这Pair<User, User>还不够自我解释 - 或者如果你喜欢的话也很干净 - 尽管它只是一个私人功能.

是否可以使用这样的ad-hoc对象返回:

private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Any {
    return object {
        val sender = userCrud.findOne(instanceWrapper.fromWho)
        val receiver = userCrud.findOne(instanceWrapper.toWho)
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用返回值,如下所示:

// ...
val users = findUsers(instanceWrapper)
users.sender // ...
users.receiver // ...
// ...
Run Code Online (Sandbox Code Playgroud)

如果没有,Kotlin的临时对象有什么意义?

And*_*lav 5

由于该类型无法在语言中表示,因此请使用返回类型推断:

class Example {
    private fun findUsers(instanceWrapper: ExceptionInstanceWrapper) =
        object {
            val sender = userCrud.findOne(instanceWrapper.fromWho)
            val receiver = userCrud.findOne(instanceWrapper.toWho)
        }

    fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是设计一个数据类:

class Example {
    private data class Users(val sender: User, val receiver: User)
    private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Users {
        return Users(
            sender = userCrud.findOne(instanceWrapper.fromWho),
            receiver = userCrud.findOne(instanceWrapper.toWho)
        )
    }

    fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的快速答复。我非常喜欢该语言的作者如何努力创建一个活跃的社区。我想避免只为这种用法声明一个类,因此我更喜欢第一个解决方案。很棒的语言。 (2认同)