SLS3.2.10,这里的不变性有什么不对?

时间:2016-11-22 01:37:52

标签: scala covariance invariance

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&lt ;: Long,但Java定义的特征LoadingCache在K类型中是不变的。     您可能希望调查通配符类型,例如_ <: Long。 (SLS 3.2.10)     .build(

这里有什么正确的解决方案?为什么代码错了?感谢。

1 个答案:

答案 0 :(得分:1)

尝试将Long替换为java.lang.Long无处不在(由于自动装箱,您仍然可以使用Long键访问它)。我记得当使用基元作为类型参数时,与Java中定义的泛型类型有类似的错误。