天天看點

實體指派處理null的問題

項目開發中涉及到一個請求實體,如果為空,就設定為"",這樣grpc的服務端,就擷取不多這個值,就不作為處理條件了

代碼如下:

val cmdbPrice: Cmdb.Price = Cmdb.Price.newBuilder()
      .setSkuId(takeIf { condition.skuId == null }?.let { "" } ?: condition.skuId)
      .setFastoneStrategy(takeIf { condition.fastoneStrategy == null }?.let { "" } ?: condition.fastoneStrategy)
      .setProductLevel(takeIf { condition.productLevel == null }?.let { "" } ?: condition.productLevel)
      .setFastoneRegion(takeIf { condition.fastoneRegion == null }?.let { "" } ?: condition.fastoneRegion)
      .setVendor(takeIf { condition.vendor == null }?.let { "" } ?: condition.vendor)
      .setProductType(takeIf { condition.productType?.name == null }?.let { "" } ?: condition.productType?.name)
      .setSystemPlatform(takeIf { condition.systemPlatform?.name == null }?.let { "" }
        ?: condition.systemPlatform?.name)
      .setFastoneModel(takeIf { condition.fastoneModel == null }?.let { "" } ?: condition.fastoneModel)
      .setFastoneFamily(takeIf { condition.fastoneFamily == null }?.let { "" } ?: condition.fastoneFamily)
      .setVendorModel(takeIf { condition.vendorModel == null }?.let { "" } ?: condition.vendorModel)
      .setPayType(takeIf { condition.payType == null }?.let { "" } ?: condition.payType)
      .build()      

但是上面的關鍵代碼

takeIf { condition.skuId == null }?.let { "" } ?: condition.skuId      

還是有點複雜:

可以修改成:

val cmdbProduct: Cmdb.Product = Cmdb.Product.newBuilder()
      .setSkuId(condition.skuId ?: "")
      .setFastoneStrategy(condition.fastoneStrategy ?: "")
      .setProductLevel(condition.productLevel ?: "")
      .setFastoneRegion(condition.fastoneRegion ?: "")
      .setVendor(condition.vendor ?: "")
      .setProductType(condition.productType?.name ?: "")
      .setSystemPlatform(condition.systemPlatform?.name ?: "")
      .setFastoneModel(condition.fastoneModel ?: "")
      .setFastoneFamily(condition.fastoneFamily ?: "")
      .setVendorModel(condition.vendorModel ?: "")
      .setPayType(condition.payType ?: "")
      .build()      
fun main(){

  val user=user(1,"sunyuhua")

  val username= user.takeIf { user.className==null }?.let { "值為空" } ?:user.className

 println("username=$username")

 val username2= user.className?:"值為空"

 println("username2=$username2")

}      

繼續閱讀