问题标签 [kotlin-generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2551 浏览

generics - Kotlin 用子类型覆盖 fun

我无法继承包含基类型的方法/乐趣的接口,我想在实现它的类中将其重写为子类型。

到目前为止我有界面

以及实现它的类:

我也有 SettingsDataModel 这是:

我想要实现的是每个实现 IModel 的类/模型,能够获得特定的 DataModel,例如:

无需投射它。我想我不能,因为它修改了乐趣的签名,使其不是真正的覆盖。我尝试使用泛型和泛型约束但没有运气:

但它不工作。有什么解决方法吗?

0 投票
1 回答
160 浏览

android - Kotlin 和泛型混淆

我有一些Drawers泛型:

然后我有一个controller接受这些Drawers,把它们放在一个ArrayList

稍后在这些中调用方法Drawers

问题出现在这一行

Android Studio 不允许,告诉我

我试过用drawers

但是随后onMarkerClicked将无法编译,并出现以下错误

0 投票
1 回答
963 浏览

generics - Kotlin “out”和“in”以及泛型 - 正确使用

我试图制作一个通用的穷人数据持久性函数,它将获取一个MutableSet数据类并将其序列化到磁盘。我想要一些易于原型制作的东西,并且可以每隔一段时间在集合上调用“save()”,这样如果我的进程被杀死,我以后可以使用已保存条目的“load()”恢复。

但即使在重新阅读泛型页面后,我也不太明白“*”、“输入”、“输出”和“无”之间的区别。这似乎可以正常工作而不会引发错误,但我不明白为什么它们都“出局”,我认为必须“入局”......或者更有可能我完全错误地理解了 Kotlin 泛型。有这样做的正确方法吗?

然后能够启动任何应用程序

0 投票
1 回答
1232 浏览

android - Kotlin 通用属性问题

在将我的 android 项目从 java 转换为 Kotlin 时,我遇到了 Kotlin 的一些问题。假设我有接口 I 和扩展接口 I 的接口 O。

泛型类 A 具有扩展接口 I 的泛型参数 V,泛型类 B 扩展类 A:

当我试图创建这样的属性时:

我收到编译器错误“需要 A,找到 B”。在 Java 中,这将毫无问题地工作。我如何使用 Kotlin 访问它?

我需要在我的应用程序中对 Basic 类使用这种方法。

BaseViewModel 具有 Navigator 类的通用参数:

BaseActivity 类:

BaseNavigator 接口用于 VM - View 通信:

这是我扩展这些类的示例代码:

授权视图模型:

认证导航器:

以及出现错误的 AuthActivity 类:

}

我还尝试将 AuthActivity 中的通用参数从 BaseViewModel 更改为 AuthViewModel,但编译器会抛出错误“required BaseViewModel”。

但在这种情况下,编译器会抛出错误“属性类型是 'AuthViewModel',它不是被覆盖的子类型”。

更新: 当我将属性添加到 BaseViewModel 时有效:

但在这种情况下,我只能创建

我需要公开,以便我可以在 Activity 类中设置它。我可以为此属性创建公共设置器吗?当我尝试创建 setter 时发生错误:

0 投票
2 回答
2974 浏览

generics - 接口中的通用函数返回具体实现

对于接口,我想添加一个返回具体实现对象的函数。

所以有了界面:

和班级

cloneMe()类的函数Music应该返回一个对象,而类Music的函数应该返回一个对象。cloneMe()VideoVideo

我最接近的是:

那我可以

这里的问题是我必须做一个未经检查的演员表,这“允许我”(即会编译)做

这是有问题的。

实现这一目标的最佳方法是什么?

0 投票
2 回答
989 浏览

java - Java中的Kotlin泛型错误

给定以下三个 kotlin 类:

我无法在 java 代码中编译以下行:

在此处输入图像描述

错误说:

SomeClass<java.util.List<? 类中的扩展类型>>不能应用于 SomeClass<java.util.List<Type>>

我还是 kotlin 的新手,这可能很小,但我似乎无法弄清楚。我将不胜感激。

0 投票
2 回答
356 浏览

android - 使用默认推断类类型的参数

我有一个像这样声明的构造函数的类

这样做是为了让开发人员在想要使用 SuperClass 而不是子类时不必指定 SuperClass。甚至发送类类型的原因是,这样开发人员就不必在尖括号中指定类型。

但现在问题来了。像下面这样创建实例,表示没有足够的信息来推断参数 T。这导致必须将类放入尖括号中。

但是由于默认值是 SuperClass,那么 kotlin 应该能够将参数 T 推断为 SuperClass。我在想什么错?

谢谢

TL;博士:

0 投票
0 回答
385 浏览

kotlin - Kotlin 通用问题,应该是 Nothing 的子类型

我正在 Kotlin 上编写一个简单的 Spring 测试,并且出现了我无法理解的泛型编译错误。功能如下:

问题是在行expectBody.consumeWith。出于某种原因,Kotlin 期望类型Nothing带有编译错误:Error:(53, 32) Kotlin: Type argument is not within its bounds: should be subtype of 'Nothing!'. 方法的实际类型consumeWithEntityExchangeResult<T>,但是方法仍然期望Nothing。我会期待类似expectBody.consumeWithEntityExchangeResult<<Map<String, Map<String, Any>>>>expectBody.consumeWith<Map<String, Map<String, Any>>>相反的东西。

但是使用类型Nothing我得到NullPointerException

以下是 Java 中相同的工作等效项:

谁能解释 Kotlin 期望的原因Nothing以及如何更正此代码?

0 投票
1 回答
118 浏览

generics - 如何在 kotlin 中将具有自类型参数的类作为接口

我有一个带有 Self 类型参数的类 Element

我现在如何创建一个以 Element 作为类型参数的列表,因为以下内容当然不起作用。

提前致谢

0 投票
1 回答
462 浏览

android - Kotlin 类型不匹配

我对泛型类型、子类型和它们之间的不匹配有疑问。我有特定的结构类和接口。我会告诉你,请解释为什么会发生类型不匹配。

假设我正在准备我的 MVP 框架,并且我有以下接口和类:

这是最高的抽象

抽象类包含Presenter的具体方法和实现

合同

最后

就它而言,AbstractView它看起来更简单。只有界面AbstractView。在合同中DashboardContract.View扩展AbstractView了接口,我DashboardActivity实现了这个DashboardContract.View接口。

所以当我在我的和创建方法中创建DashboardPresenter一个属性时,我得到了为什么?不是 的子类型吗?DashboardActivityfun getPresenter() : Presenter<AbstractView>Type mismatch errorPresenter<AbstractView>

让我们看一下Java代码:

我正在看反编译 Kotlin 的 Java 代码。我把它放在下面。这是看起来的Presenter样子:

我认为如果我在 Kotlin 中使用泛型类,我也会在 java 中获得泛型类。我错了。

AbstractPresenter给出:

合同

DashboardPresetner:_