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, при использовании примитивов в качестве параметров типов.

Другие вопросы по тегам