首页 > 解决方案 > 如何像 JAVA 一样在 Kotlin 中初始化抽象类对象

问题描述

我是 kotlin 的新手,只是从 android/java 转到 android/kotlin。Kotlin 确实是一门简单的语言,但在某些地方它的支持不够,或者它的建议不起作用。我正在编写一个代码,我将在其中调用一个具有参数构造函数的通用抽象类。泛型类是用 Java 编写的,我可以从 java 类初始化该类而不会出现任何错误,但是当我从 kotlin 初始化泛型类时,它会给出类型不匹配错误。

第一个让我向您展示我的java代码没有错误

GenericAdapter<String, NotificationFragmentBinding> transmissionAdapter;
   transmissionAdapter = new GenericAdapter<String, NotificationFragmentBinding>(getContext(),carsList) {
        @Override
        public int getLayoutResId() {
            return 0;
        }

        @Override
        public void onBindData(String model, int position, NotificationFragmentBinding dataBinding) {

        }

        @Override
        public void onItemClick(String model, int position) {

        }
    }

现在让我向您展示我的 kotlin 代码错误

 var notificationGenericAdapter: GenericAdapter<String, NotificationFragmentBinding>? = null
notificationGenericAdapter = object : GenericAdapter<String?, NotificationFragmentBinding?>(this, list) {
        override fun getLayoutResId(): Int {
            return 0
        }

        override fun onBindData(model: String?, position: Int, dataBinding: NotificationFragmentBinding?) {}
        override fun onItemClick(model: String?, position: Int) {}
    }

Kotlin 代码给了我类型不匹配错误。

标签: javaandroidkotlingenericsabstract

解决方案


感谢@Stanislav Bondar

这是一个愚蠢的错误

正确的版本在下面

notificationGenericAdapter = object : GenericAdapter<String, NotificationFragmentBinding>(this, list) {
    override fun getLayoutResId(): Int {
        return 0
    }

    override fun onBindData(model: String?, position: Int, dataBinding: NotificationFragmentBinding?) {}
    override fun onItemClick(model: String?, position: Int) {}
}

字符串和字符串有错误?我用的是字符串?但是当我分配时,我使用的是没有空检查的字符串


推荐阅读