具有派生属性的Kotlin数据类

我有一堂课是两堂课的总结。 我把这个类做成了一个数据类,如下所示

data class Device(private val deviceModel: DeviceModel, private val deviceStatus: DeviceStatusModel) { val name = deviceModel.name ?: "Unknown" val id = deviceModel.id ?: -1 val mode = when(deviceStatus.mode) { 1 -> DEVICE_MODE_MANUAL 2 -> DEVICE_MODE_AUTO 3 -> DEVICE_MODE_OVERRIDE else -> DEVICE_MODE_MANUAL } val strength = deviceStatus.strength ?: 0 } 

但是,当我打印这个类时,它不打印名称,ID,模式和强度属性,它打印设备型号和设备状态。 有没有办法让类生成toString基于派生属性而不是构造函数?

2 Solutions collect form web for “具有派生属性的Kotlin数据类”

DeviceModel和DeviceStatusModel用于toString(),因为您通过主构造函数将它们声明为属性来执行所需操作,您必须使用辅助构造函数从中调用主构造函数,在该构造函数中将声明要查看的属性在toString()中是这样的:

 import kotlin.properties.Delegates import kotlin.collections.MutableList const val DEVICE_MODE_MANUAL = 10 const val DEVICE_MODE_AUTO = 20 const val DEVICE_MODE_OVERRIDE = 30 data class Device private constructor ( val name: String, val id: Int, val mode: Int, val strength: Int ) { constructor( deviceModel: DeviceModel, deviceStatus: DeviceStatusModel ) : this( name = deviceModel.name ?: "Unknown", id = deviceModel.id ?: -1, mode = when(deviceStatus.mode) { 1 -> DEVICE_MODE_MANUAL 2 -> DEVICE_MODE_AUTO 3 -> DEVICE_MODE_OVERRIDE else -> DEVICE_MODE_MANUAL }, strength = deviceStatus.strength ?: 0 ) } data class DeviceModel( val name: String, val id: Int ) data class DeviceStatusModel( val mode: Int, val strength: Int ) fun main(args: Array) { val deviceModel = DeviceModel( "Test ", 35 ) val deviceStatusModel = DeviceStatusModel( 1, 42 ) val device = Device( deviceModel, deviceStatusModel ) println( device ) } 

:我想你不希望人们通过其他方式实例化你的对象,而不是通过DeviceModel和DeviceStatusModel,所以我做了主要的构造函数私人

您可以重写toString()方法,并提供您需要的任何实现,而不是默认的编译器生成的实现。

  • 为什么Kotlin编译后需要捆绑它的运行时?
  • 布局的问题和错误在android应用程序开发使用kotlin
  • Gradle项目同步失败,Kotlin
  • 在Kotlin获得lateinit属性的类
  • Android Kotlin nextin排除了最后的随机食物
  • 是否有一个相当于Swift init Kotlin(重复:计数:)
  • 习惯性的Kotlin正则expression式
  • 颠倒中缀布尔结果kotlin
  • 无法添加BigInteger
  • 为什么在更改ViewPager的padding和pagemargin之前,先滚动ViewPager?
  • Kotlin允许扩展现有types是否好?
  • Kotlin language will be the best programming language for Android.