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但是字符串是预期的
我无法理解为什么这不起作用。
答案 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)
}