如何在Kotlin中将对象,布尔值和long值添加到数组中?

时间:2018-12-01 20:57:49

标签: arrays kotlin

我有这种方法

private fun checkRoomIdAndFindCinemaAndCheckIfRoomExists(paramRoomId: String?, paramCinemaId: String?, roomExists: Boolean?) : Array<Any> {

    val roomId = ValidationHandler.validateId(paramRoomId, "room id")

    val cinema = cinemaService.getCinemaById(paramCinemaId)

    val roomExists = roomRepository.existsByIdAndCinemaId(roomId, paramCinemaId!!.toLong())

    return arrayOf(roomId, cinema, roomExists)
}

我在这里想要做的是将roomId作为Long,cinema作为对象和roomExists作为布尔值添加到数组中,返回类型应该是数组。我该怎么办?

稍后我想通过另一种方法访问它们。

2 个答案:

答案 0 :(得分:2)

我建议使用惯用的Kotlin代码,而不是已经建议的代码。当您要从一个函数返回多个值时,应充分利用数据函数或现有的类,例如PairTriple。在这种情况下,Triple可为您提供帮助:

private fun checkRoomIdAndFindCinemaAndCheckIfRoomExists(
    paramRoomId: String?,
    paramCinemaId: String?,
    roomExists: Boolean?
): Triple<Long, Any, Boolean.Companion> {
    //TODO
    return Triple(roomId, cinema, roomExists)
}

好处是,您可以确定类型,而不必从不安全的Array<Any>进行任何类型的转换。此外,数据类可让您利用解构功能,如下所示:

val (roomId, cinema, roomExists) = 
    checkRoomIdAndFindCinemaAndCheckIfRoomExists("id1", "id2", true)

答案 1 :(得分:1)

您可以这样调用方法:

val array = checkRoomIdAndFindCinemaAndCheckIfRoomExists(paramRoomId, paramCinemaId, roomExists)

array的推断类型为Array<Any>
您可以访问数组的项:

val roomId = array[0] as Long 
val cinema = array[1] as YourObjectClass
val roomExists = array[2] as Boolean