如何在Kotlin中实现接口的通用功能?

如何在Kotlin中实现接口的通用功能?,kotlin,Kotlin,shiro提供了一个CacheManager.java接口 package org.apache.shiro.cache; public interface CacheManager { <K, V> Cache<K, V> getCache(String var1) throws CacheException; } package org.apache.shiro.cache; 公共接口缓存管理器{ Cache getCache(stringvar1)抛出C

shiro提供了一个CacheManager.java接口

package org.apache.shiro.cache;

public interface CacheManager {
    <K, V> Cache<K, V> getCache(String var1) throws CacheException;
}
package org.apache.shiro.cache;
公共接口缓存管理器{
Cache getCache(stringvar1)抛出CacheException;
}
我编写了一个类DefaultCacheManager.kt来实现CacheManager

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 ....
}
打开类DefaultCacheManager:CacheManager{
@抛出(CacheException::类)
覆盖趣味getCache(名称:字符串):缓存{
返回InnerCache(名称)
}
} 
类InnerCache(变量名称:String):缓存{
//……省略。。。。
}
上面的代码将导致编译错误

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
冲突重载:
@抛出public open fun getCache(名称:String):在com.yootai.oms.permission.DefaultCacheManager中定义的缓存,
公共抽象趣味getCache(p0:String!):Cache!在org.apache.shiro.cache.CacheManager中定义
然后,我修改了下面的代码

override fun <K : Any?, V : Any?> getCache(name: String): Cache<K, V> {
        return InnerCache(name)
}
override-fun-getCache(名称:String):缓存{
返回InnerCache(名称)
}
但是,它会给我一个编译错误信息

Type mismatch.
Required: Cache<K,V>
Found: InnerCache
类型不匹配。
必需:缓存
找到:InnerCache

我怎样才能解决这个问题?请帮帮我。

目前,您没有从接口实现该方法:您没有编写一个为给定类型返回缓存的方法,而是有一个为
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 ....
}
打开类DefaultCacheManager:CacheManager{
@抛出(CacheException::类)
覆盖趣味getCache(名称:字符串):缓存{
return InnerCache(name)//通过类型推断创建InnerCache
}
} 
类InnerCache(变量名称:String):缓存{
//……省略。。。。
}