我有这种方法
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
作为布尔值添加到数组中,返回类型应该是数组。我该怎么办?
稍后我想通过另一种方法访问它们。
答案 0 :(得分:2)
我建议使用惯用的Kotlin代码,而不是已经建议的代码。当您要从一个函数返回多个值时,应充分利用数据函数或现有的类,例如Pair
或Triple
。在这种情况下,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