当前位置: 首页 > 知识库问答 >
问题:

Kotlin-nullable接收器扩展不接受非nullable等效项

孔安阳
2023-03-14
class Foo<T>

fun <T> Foo<Iterable<T>?>.bar(i: Iterable<T>) {
    ...
}
val x = listOf(123, 456)
val f = Foo<Iterable<Int>>()

f.bar(x)

f上的编译器错误:

类型不匹配

必需:foo ?>

共有1个答案

祁鸿哲
2023-03-14

只需添加out修饰符,它就可以工作了:

class Foo<out T>

我们使用out修饰符来指示协方差(类似于Java中的“?extends t”)。协方差--是将泛型类型参数从类更改为其父类之一的能力,即将list 赋值为list

以下是关于泛型的文档。

 类似资料:
  • 这是一个一般性的问题。假设我有一个用kotlin编写的扩展函数,它将DP转换为PX,并返回一个非空Int java中的函数如下所示 在我看来,使Java-interop感到生成和不受欢迎。

  • 如果为null,则上面的代码将抛出。所以我得包支票。 那么在这种情况下,什么是最佳实践呢?nullable有什么用?

  • 问题内容: 两者有什么区别?两者似乎都意味着该值可以为null,因此应进行相应处理,即检查是否为null。 更新: 上面的两个注释是JSR-305 / FindBugs的一部分:http : //findbugs.sourceforge.net/manual/annotations.html 问题答案: 我认为从添加的链接中可以很清楚地看到:如果您使用并且使用该值的代码未检查,FindBugs会将

  • 我试图提取JDBC数据库驱动程序的数据库元数据。 而现在我面对的是一部分我无法向自己解释的留档: 方法:DatabaseMetaData.getColumns(…) (JavaDoc)声明了两个不同的“可空性”列: 和 我能想到的两个不同专栏的唯一想法是: 其中一个定义了表列在读取时可以为空,而其他可以插入到该表列中的状态可以为空。但是我无法确定这个想法的正确性。 有谁确切地知道这两列之间的区别是

  • 问题内容: 我想使用 注释消除。我在网上找到了一些教程,我注意到这个注释来自软件包;但是当我导入它时,会生成一个编译错误:找不到符号 问题答案: 您需要包括一个存在该类的罐子。您可以在这里找到它 如果使用Maven,则可以添加以下依赖项声明: 对于Gradle:

  • 我正在尝试基于非阻塞NIO消息开发自己的通信库。我已经阅读了1000篇关于它的教程和书中的章节,我认为最后我有了一些可以在几乎没有同时连接的情况下工作的东西。但是当我在服务器端有很多连接共存时,我遇到了一些问题。 我有4个私有方法的典型选择器实现:accept、finishConnect、read和write。我的问题在于前两个:接受和完成连接。 当客户端打开一个新的套接字,并且一个可接受的键唤醒