Учитывая операции, которые вы выполняете над bitmapStorage
, я предполагаю, что это экземпляр MutableMap
. Если это так, я думаю, что есть еще более идиоматический c способ достичь того же результата, и он включает в себя использование getOrPut
метода . По сути, он возвращает значение, связанное с данным ключом, если он существует, в противном случае он связывает любое значение, которое вы хотите, с данным ключом и возвращает это значение.
Пример:
val myMap = mutableMapOf<String, String>(
"key1" to "value1"
)
fun complexMethodToComputeValue(): String {
// do something complex
return "I will be called"
}
val value1 = myMap.getOrPut("key1") {
// this will not be called
"I won't be called"
}
val value2 = myMap.getOrPut("key2", ::complexMethodToComputeValue)
println(value1)
println(value2)
Это печатает:
value1
I will be called
Итак, чтобы вернуться к вашему коду, его можно переписать как:
fun getBitmap(id: Int) = bitmapStorage.getOrPut(id) {
BitmapFactory.decodeResource(resources, id)
}