kotlin,如何返回泛型类型成员变量

2023-12-12

返回泛型类型的成员变量时出错(在 Android 上,不确定是否有任何区别)

private var mData: T? = null
override fun <T> getJsonPOJO(): T? {
    return mData
}

Type mismatch: inferred type is T#2 (type parameter of RemoteData)? but T#1 (type parameter of RemoteData.getJsonPOJO)? was expected

这是代码,该函数返回泛型类型:

interface IRemoteData {
    fun isSuccess() : Boolean
    fun <T> getJsonPOJO() : T?
    fun getCode() : Int
    fun getMessage() : String
}


class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData {

    private val mIsSuccess: Boolean = response.isSuccessful
    private val mCode: Int = response.code()
    private val mMessage : String = response.message() ?: ""

    private var mData: T? = null
    init {
        val jsonString: String? = response.body()?.string() ?: ""
        mData = if (jsonString != null) Gson().fromJson(jsonString, pojoClassType) else null
    }

    override fun isSuccess(): Boolean {
        return mIsSuccess
    }

    override fun <T> getJsonPOJO(): T? {
        return mData  //<=== compile error here
    }

    override fun getCode(): Int {
        return mCode
    }

    override fun getMessage(): String {
        return mMessage
    }

}

非常感谢任何建议!

尝试返回传入的 T,但仍然出现相同的错误:

class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>, testData: T) : IRemoteData {
......
    private var mData: T? = testData
......
    override fun <T> getJsonPOJO(): T? {
        return mData  //<=== same compiler error
    }
}

这就是您要寻找的内容:

interface IRemoteData<T> {
    fun isSuccess() : Boolean
    fun getJsonPOJO() : T?
    fun getCode() : Int
    fun getMessage() : String
}


class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData<T> {

    private var mData: T? = null
    override fun getJsonPOJO(): T? {
        return mData
    }

}

The T到处都会被替换,所以想象一下如果它是String(我发现使用泛型类型时更简单)。 你会有:

interface IRemoteData<String> {
  fun getJsonPOJO(): String?
}

class RemoteData<String>(...): IRemoteData<String> {
  private var mData: String? = null
  override fun getJsonPOJO(): String? {
    return mData
  }
}

就是这样 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kotlin,如何返回泛型类型成员变量 的相关文章

随机推荐

  • 如何使用 Inno Setup 创建一个安装程序来提取 .rar 存档的内容?

    我想在 Inno Setup 中创建一个安装程序 它提取预先创建的内容Data rar档案 我的意思是它应该将 rar 存档的内容视为应用程序的文件和文件夹 通过 Inno Setup 使用外部提取实用程序的通用方法 创建档案 将存档嵌入到
  • Material-UI LinearProgress 栏不起作用

    我有一个简单的文件上传实用程序 我正在使用它反应 dropzone 并结合我想使用material ui LinearProgress bar来显示进度 下面显示的是我创建的组件 它呈现文件上传实用程序以及 LinearProgress 栏
  • 在 React 项目上运行 NPM start 后出错

    我已将项目从以前的计算机复制到当前的计算机 跑步后npm install And npm start我的终端给出了这个错误 sh 反应脚本 找不到命令npm 错误 文件shnpm 错误 代码 生命周期npm 错误 错误信息npm 错误 系统
  • Java 1.7 重写 hashCode() 的行为不符合我的预期

    我有一个类 我重写了 hashCode 方法和 equals 方法 equals 方法的行为符合我的预期 但是 hashCode 方法的行为似乎并不符合我的预期 我假设我的期望是不正确的 但不确定为什么 以下是重写的方法 public cl
  • .not() 和 .live() 不起作用

    jQuery a not div mnuMain a live click function event event preventDefault alert yes I got u 如何让它发挥作用 尝试将其全部放入主选择器中 Examp
  • 在 Hibernate 中指定“唯一的”限制

    我有一个实体 我想在其中指定两个字段应具有唯一对值的限制 例如 一个字段是所有者 另一个字段是名称 我想要一个限制 即 所有者 名称 的组合应该是唯一的 但我不想将它们设为复合主键 Entity Table name keyfile pub
  • Meteor:资源解释为图像,但以 MIME 类型 text/html 传输

    我正在使用 Meteor 0 5 2 并且在 Chrome 中针对每个由模板助手生成 src 的图像收到以下警告 Resource interpreted as Image but transferred with MIME type te
  • JavaScript async/await for Promises inside Array.map() [重复]

    这个问题在这里已经有答案了 给出以下代码 class SomeClass async someFunc const urlParameters 0 1 2 const batchAjaxResult await urlParameters
  • 我如何告诉 CDI 容器“激活”bean?

    假设我有一些带有注射的课程 class MyBean Inject Helper helper all sorts of data 并且这个类是以 CDI 容器不知道的方式创建的 例如反射 序列化或new 在这种情况下helper is n
  • 获取字典nodejs中最大值的键

    我想使用nodejs获取字典中最大值的键 这就是我所做的 但它返回最大值而不是键 var b 1 0 02 2 0 87 3 0 54 4 0 09 5 0 74 var arr Object keys b map function key
  • Java 构造函数未定义?

    好的 我正在为学校做一项作业 我设置了我的主类和另一个名为 Transaction 的类 在我的主课中 我有 Transaction t new Transaction Transaction 带有下划线 它表示构造函数未定义 为什么 Tr
  • 如何在 C# 中使用 32 位 unicode 字符?

    也许我不需要 32 位字符串 但我需要表示 32 位字符 http www fileformat info info unicode char 1f4a9 index htm现在我抓住了符号字体 并且在粘贴它时可以看到该字符 在网址或任何文
  • openerp 7 中的字段级访问权限和安全性

    假设我有 3 个用户 如下 user employee having access rights Human Resource Employee group user officer having access rights Human R
  • 等待一次获取完成后再开始下一次获取

    我有一个要发送到谷歌云的数据列表 我当前的代码如下所示 const teams LFC MUFC CFC teams forEach team gt fetch url URL method PUT body team 这适用于一个team
  • Android 中可以通过 String id findView 吗?

    Android 中可以通过 String Id 来 findView 吗 我以编程方式在表中添加一些行 并且在下一次迭代中需要删除其中一些行 并且我有列表 id tblRow 1 tblRow 3 我可以通过 id 从列表中检索吗 Use
  • 如何使用 perl 与用户和 SSL 身份验证进行 SMTP 连接并发送带附件的电子邮件

    我使用的是 SMTP 邮件服务器 需要用户 ssl 身份验证才能连接 我正在寻找 perl 模块来连接到邮件服务器并发送电子邮件 但没有发现任何有用的东西 任何有关 perl 模块或任何 perl 代码的建议将不胜感激 EDIT 我尝试使用
  • 这些示例中“this”的调用有什么区别?

    我正在读克罗克福德的 JS 好部分 他有两个使用这个的例子 我不明白为什么在一个例子中他使用this在另一个他使用that 第一个例子 String method deentify function var entity quot lt l
  • 为什么复杂对象的“in”类型不窄?

    当我使用 in 对复杂对象进行类型缩小时 我偶然发现了 Typescript 中的问题 除非我首先提取它的代理变量 否则它不会正确缩小类型 type Animal fish Fish bird Bird type Fish swim gt
  • Symfony2,加载没有缓存的css文件

    目前我正在做基于symfony2的网站设计 问题是如何禁用css文件的缓存 现在 如果我更改 css 文件中的某些内容 浏览器中不会发生任何变化 当我尝试缓存 清除时 仍然什么也没有 配置 yml Assetic Configuration
  • kotlin,如何返回泛型类型成员变量

    返回泛型类型的成员变量时出错 在 Android 上 不确定是否有任何区别 private var mData T null override fun