来自shiro的接口CacheManager.java。
package org.apache.shiro.cache;
public interface CacheManager {
<K, V> Cache<K, V> getCache(String var1) throws CacheException;
}
我编写了一个实现CacheManager的类DefaultCacheManager.kt。
open class DefaultCacheManager : CacheManager {
@Throws(CacheException::class)
override fun getCache(name: String): Cache<Any, Any> {
return InnerCache(name)
}
}
class InnerCache(var name: String) : Cache<Any, Any> {
//.... omitted ....
}
上面的代码会导致编译错误。
Conflicting overloads:
@Throws public open fun getCache(name: String): Cache<Any, Any> defined in com.yootai.oms.permission.DefaultCacheManager,
public abstract fun <K : Any!, V : Any!> getCache(p0: String!): Cache<K!, V!>! defined in org.apache.shiro.cache.CacheManager
然后,我在下面修改了我的代码。
override fun <K : Any?, V : Any?> getCache(name: String): Cache<K, V> {
return InnerCache(name)
}
但是,它会给我一个编译错误信息。
Type mismatch.
Required: Cache<K,V>
Found: InnerCache
我该如何解决这个问题?请帮帮我。
答案 0 :(得分:2)
目前,您还没有从界面实现该方法:您没有编写一个返回给定类型的缓存的方法,而是您有一个返回Any
类型的缓存的方法。
您还需要将自己的实现设为通用:
open class DefaultCacheManager : CacheManager {
@Throws(CacheException::class)
override fun <K, V> getCache(name: String): Cache<K, V> {
return InnerCache(name) // creates InnerCache<K, V> thanks to type inference
}
}
class InnerCache<K, V>(var name: String) : Cache<K, V> {
//.... omitted ....
}