【问题标题】:Not satisfied: inferred type T? is not subtype of Any不满意:推断类型 T?不是 Any 的子类型
【发布时间】:2018-02-22 07:04:48
【问题描述】:

为了映射结果我已经实现了密封的泛型类:

public sealed class ResultMapper<out T : Any> {
    public class Ok<out T : Any>(public val value: T,
                            override val response: Response) : Result<T>(), ResponseResult {
        override fun toString(): String = "Result.Ok{value=$value, response=$response}"
    }
}

   public interface ResponseResult {
     val response: Response
   } 

现在我想这个类应该可以按预期工作:

 ResultMapper.Ok(body,raw)

private class Body<T>() {
  onResponse(response: Response, raw: Raw) {
   ResultMapper.Ok(response.body(),response.raw()) --> It returned an exception
  }
}

构造函数 Ok 不满足:推断类型 T?不是的子类型 任何

【问题讨论】:

    标签: generics kotlin bounds kotlin-android-extensions


    【解决方案1】:

    Body 类有一个泛型类型参数T 没有任何界限,也就是说,它就像定义T: Any?Ok 的类型参数被限制为T: Any。您应该调整 Body 以不允许可以为空的类型:

    class Body<T: Any>
    

    或者,删除其他类中的上限。

    【讨论】:

    • 我只是想从 ResultMapper 类中删除 Any ,例如:ResultMapper &lt;out T&gt; 导致许多内置类不允许使用 Any 显式类型。你觉得这个还行吗?
    • 这是另一种选择,当可空类型适合您的用例时,确保您可以这样做
    猜你喜欢
    • 2020-07-07
    • 2020-03-02
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多