不满意:推断类型 T?不是 Any 的子类型

5
为了映射结果,我实现了密封泛型类:
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?不是Any的子类型。
1个回答

8

Body具有一个没有任何边界的通用类型参数T,即它就像定义了T: Any?,而Ok的类型参数被限制为T: Any。您应该调整Body以不允许可为空的类型:

class Body<T: Any>

或者,也可以在其他类中删除上限。


我在思考是否应该从 ResultMapper 类中删除 Any,例如:ResultMapper <out T>,因为许多内置类不允许使用 Any 显式类型。你觉得这样做可以吗? - QuokMoon
这是一种替代方案,当可为空的类型适用于您的用例时,您可以使用它。 - s1m0nw1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接