SLS3.2.10, что плохого в неизменности здесь?
У новичка Scala возникла проблема:
val cache: LoadingCache[Long, String] = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader [Long, String] {
override def load(key: Long): String = key.toString
})
И получил ошибку времени сборки: Ошибка:(12, 11) несоответствие типов; Найдено: com.google.common.cache.LoadingCache[Long,String] требуется: com.google.common.cache.LoadingCache[Long,String] Примечание. Long <: длинная, но определенная Java черта LoadingCache инвариантна для типа K Возможно, вы захотите исследовать подстановочный тип, такой как _ <: Long
, (SLS 3.2.10)
.build(
Что здесь исправить? Почему код неправильный? Благодарю.
1 ответ
Попробуйте заменить Long
с java.lang.Long
везде (вы все равно сможете получить к нему доступ Long
ключи благодаря автобоксу). Я помню подобные ошибки с родовыми типами, определенными в Java, при использовании примитивов в качестве параметров типов.