Я не хотел писать много кода шаблона, поэтому решил написать общий метод для lazy-init.Общая ленивая инициализация с помощью scala
import java.util._
import concurrent.ConcurrentHashMap
object GenericsTest {
val cache: ConcurrentHashMap[Long,
ConcurrentHashMap[Long,
ConcurrentHashMap[Long,
ConcurrentHashMap[Long, Long]]]] = new ConcurrentHashMap()
def main(args: Array[String]) {
val x = get(cache, 1)(() => new ConcurrentHashMap())
val y = get(x, 1)(() => new ConcurrentHashMap())
val z = get(y, 1)(() => new ConcurrentHashMap())
}
def get[B, A](map: ConcurrentHashMap[A, B], a: A)(factory:() => B): B = {
if (map.containsKey(a)) {
map.get(a)
} else {
val b = factory()
map.put(a, factory())
b
}
}
}
Этот пример работает только с жестко Long, но не с общей , что может быть проблема? Может быть, есть еще один способ сделать такие вещи?
Можете ли вы показать, что именно это не работает, и объяснить, каким образом это не удается? –