Intereting Posts
Kotlin inheritnce – Не передано значение для контекста параметра Список загруженных файлов равен нулю. Унаследованные декларации платформы сталкиваются при расширении класса Java в Котлине Поток Akka, выше по потоку, не производя значения JavaRX: как вернуть кешированное значение немедленно и параллельно выполнить сетевой запрос Импорт банкоматов в kotlin REPL Как обрабатывать пустой параметр в Котлине? Kotlin: Что такое файл kjsm? Как установить автоматический импорт для Kotlin в Android Studio? UnsupportedOperationException Команда «android» больше не включена в SDK Kotlin Coroutines: Нужно ли синхронизировать общее состояние? Невозможно включить предупреждение «тип платформы объявлений» Kotlin в сообщение об ошибке Сохранять двойные кавычки при получении элемента из JSONArray Предупреждение о компиляторе Android Studio Kotlin Spring Framework проглатывает исключение пользовательских преобразователей

Как реализовать общую функцию интерфейса в Котлин?

Существует интерфейс CacheManager.java от сиро.

package org.apache.shiro.cache; public interface CacheManager { <K, V> Cache<K, V> getCache(String var1) throws 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 .... } 

Приведенный выше код вызовет ошибку компиляции.

 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 

Как я могу исправить проблему? Пожалуйста, помогите мне.

Как бы то ни было, вы не реализуете метод из интерфейса: вы не пишете метод, который возвращает кеш для данных типов, но вместо этого у вас есть метод, который возвращает кеш для типа 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 .... }