2015-10-06 46 views
1

當前我有一個私有函數,它返回一個Pair<User, User>對象。第一個用戶是東西的發送者,第二個用戶是該東西的接收者。在Kotlin中返回臨時對象的函數

我認爲這Pair<User, User>是不夠自我解釋 - 或者乾淨,如果你喜歡 - 即使它只是一個私人功能。

是否有可能與這樣一個特設的對象返回:

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

,並使用返回的值是這樣的:

// ... 
val users = findUsers(instanceWrapper) 
users.sender // ... 
users.receiver // ... 
// ... 

如果不是,Kotlin中的臨時對象有什麼意義?

回答

3

由於類型不能在語言,使用的返回類型推斷來表示:

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 
} 

另一種辦法是制定一個數據類:

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 
} 
+1

謝謝你的快速答覆。我非常喜歡該語言的作者如何努力創建一個活躍的社區。我想避免僅爲這種用法聲明一個類,所以我更喜歡第一種解決方案。真棒語言。 – LordScone