You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin扩展函数中返回正确的ApiUpdateDeviceList类型

问题分析与解决方案

核心问题

你的代码存在两个关键错误:

  1. 扩展函数逻辑错位:DbEquipmentWithMediaList的扩展函数应该处理当前实例的转换,但你却在遍历外部的dbFields列表,逻辑完全不符。
  2. forEach的误用:forEach是无返回值的遍历函数,不能将其赋值给ApiUpdateDeviceList类型变量,且返回类型与函数声明的单个对象不匹配。

解决方案分两种场景

场景1:单个DbEquipmentWithMediaList转成单个ApiUpdateDeviceList

这符合你定义的扩展函数语义,直接基于当前实例转换:

fun DbEquipmentWithMediaList.toApiUpdateDeviceList(): ApiUpdateDeviceList {
    return ApiUpdateDeviceList(
        deviceEquipmentId = this.sSEquipmentDbInfo.deviceEquipmentId,
        secondaryDeviceId = this.sSEquipmentDbInfo.secondaryDeviceId,
        deviceInstanceId = this.sSEquipmentDbInfo.deviceInstanceId?.toString(), // 空值处理避免NPE
        deviceSerialNumber = this.sSEquipmentDbInfo.deviceSerialNumber,
        devicePartNumber = this.sSEquipmentDbInfo.devicePartNumber,
        deviceManufacturerName = this.sSEquipmentDbInfo.deviceManufacturer,
        deviceInstallationDate = DateUtil.dateToStringUTCSiteSurvey(this.sSEquipmentDbInfo.deviceInstallationDate),
        deviceLocation = this.sSEquipmentDbInfo.locationInfo,
        deviceTechnicianNotes = this.sSEquipmentDbInfo.deviceTechnicianNotes
    )
}

场景2:List<DbEquipmentWithMediaList>转成List<ApiUpdateDeviceList>

如果实际需求是把整个设备列表转换为API所需的列表,给列表写扩展函数:

fun List<DbEquipmentWithMediaList>.toApiUpdateDeviceList(): List<ApiUpdateDeviceList> {
    return this.map { dbItem ->
        ApiUpdateDeviceList(
            deviceEquipmentId = dbItem.sSEquipmentDbInfo.deviceEquipmentId,
            secondaryDeviceId = dbItem.sSEquipmentDbInfo.secondaryDeviceId,
            deviceInstanceId = dbItem.sSEquipmentDbInfo.deviceInstanceId?.toString(),
            deviceSerialNumber = dbItem.sSEquipmentDbInfo.deviceSerialNumber,
            devicePartNumber = dbItem.sSEquipmentDbInfo.devicePartNumber,
            deviceManufacturerName = dbItem.sSEquipmentDbInfo.deviceManufacturer,
            deviceInstallationDate = DateUtil.dateToStringUTCSiteSurvey(dbItem.sSEquipmentDbInfo.deviceInstallationDate),
            deviceLocation = dbItem.sSEquipmentDbInfo.locationInfo,
            deviceTechnicianNotes = dbItem.sSEquipmentDbInfo.deviceTechnicianNotes
        )
    }
}

用map函数遍历列表,将每个数据库实体转换为API实体,最终返回转换后的列表。


调用示例

  • 单个转换:singleDbItem.toApiUpdateDeviceList()
  • 列表转换:dbFields.toApiUpdateDeviceList()

内容的提问来源于stack exchange,提问作者OEThe11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:35:19