【问题标题】:List<? extends Something > is generated instead of List<Something>列表<? extends Something > 生成而不是 List<Something>
【发布时间】:2019-07-24 21:41:22
【问题描述】:

我有一个返回 JSON 响应的服务调用,该响应随后通过数据管理器传递,如果服务成功则转换数据,如果调用失败则创建错误正文。

数据管理器是用 kotlin 编写的,特定的行 我感兴趣的代码是这个

val mutableList = mutableListOf<Address>()
return Result.error(errorTransformation(serviceErrors, mutableList))

我的errorTransformation 类基本上是一个异常调用,这是用java 编写的。异常类的构造函数是

ExceptionClass(ServiceErrors serviceError ,List<Address> address){
    // initiialize fields here
}

现在,当我尝试初始化我的异常类时,它说找到了适当的构造函数,它向我显示了使用语法生成一个的建议

ExceptionClass(ServiceErrors serviceError ,List<? extends Address> address){
    // initiialize fields here
}

为什么会这样?我只想要List&lt;Address&gt;,而不是List&lt;? extends Address&gt;

【问题讨论】:

  • 只是猜测,但如果将第一行替换为 val mutableList = ArrayList&lt;Address&gt;() 是否一切正常?
  • @BenP.Nope,它不会改变任何东西
  • kotin 中的集合默认是协变的(与 Java 不同),所以这种行为是有效的。您收到的确切消息/警告是什么?你能把它贴在这里吗?另外,您使用的是哪个 kotlin 版本?

标签: java android generics kotlin rx-java2


【解决方案1】:

隐式使用List&lt;? extends Address&gt; 而不是List&lt;Address&gt;kotlin 的特定行为。您可以使用 @JvmSuppressWildcards 注释强制 kotlin 生成您需要的内容

val mutableList = mutableListOf<@JvmSuppressWildcards Address>()

【讨论】:

  • 我尝试过使用@JvmSuppressWildcardsand,但没有成功
猜你喜欢
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 2011-11-05
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多