fun <T : Any> getOrPut(key: String, defaultValue: () -> T): T
fun <T : Any> getOrPut(key: String, defaultValue: () -> T, invalidate: Boolean): T