泛型需要String找到kotlin.String

时间:2016-01-07 06:48:37

标签: generics kotlin

class CacheEntry<T>(val value: T, val size: Long)

interface Cache<T>{
    val NO_ENTRY_FOUND : CacheEntry<T>
}

class CacheImpl<String> : Cache<String>{
    override val NO_ENTRY_FOUND =  CacheEntry<String>(value = "not_found", size = -1)
}

我收到此错误:

  

错误:(12,65)Gradle:类型不匹配:推断类型是kotlin.String但是字符串是预期的

我无法理解为什么这不起作用。

1 个答案:

答案 0 :(得分:4)

在您的情况下,String是类型参数的名称,而不是标准的String类型,因此问题中的代码等同于:

class CacheImpl<T> : Cache<T> {
    override val NO_ENTRY_FOUND = CacheEntry<T>(value = "not_found", size = -1)
}

CacheEntry第一个参数需要T,但您提供了String,这就是您看到编译错误的原因。修复非常简单,您只需从String声明中删除CacheImpl

class CacheImpl : Cache<String> {
    override val NO_ENTRY_FOUND = CacheEntry<String>(value = "not_found", size = -1)
}