Kotlin 当一个参数是类时,使用默认值初始化类
我有以下数据类,我想用默认值初始化它们。但是,我不确定当硬盘是一个类时如何初始化它 我已尝试执行以下操作,但这将创建一个新的HeadDisk对象,而不是我想要的:Kotlin 当一个参数是类时,使用默认值初始化类,kotlin,Kotlin,我有以下数据类,我想用默认值初始化它们。但是,我不确定当硬盘是一个类时如何初始化它 我已尝试执行以下操作,但这将创建一个新的HeadDisk对象,而不是我想要的: kotlin 1.2.60 我可以通过显式地将其设置为null值来将其设置为null。但我不想显式地将其设置为null data class HeadDisk(var size: Float, var manufacturer: Manufacturer) data class Comput
kotlin 1.2.60
我可以通过显式地将其设置为null值来将其设置为null。但我不想显式地将其设置为null
data class HeadDisk(var size: Float,
var manufacturer: Manufacturer)
data class Computer(var speed: Float = 0F,
var screenSize: Float = 0F,
var hardDisk: HeadDisk = HeadDisk())
或者对委托人执行以下操作:
data class Computer(var speed: Float = 0F,
var screenSize: Float = 0F,
var hardDisk: HeadDisk? = null)
只是想知道解决这个问题的最佳和最简单的解决方案是什么?我想您应该在这里使用,因为构造函数中不支持委托和lateinit变量。我通常是这样做的: //简单例子
data class Computer(var speed: Float = 0F,
var screenSize: Float = 0F) {
var hardDisk: HeadDisk by Delegates.notNull()
}
因此我有一个val
,它表示没有值的状态
另一个解决方案是使用可选
或选项
中的数据类型我认为您的假设是错误的。使用
class Foo(val bar: String = NO_BAR) {
// note the instance equality check
fun hasBar() = bar !== NO_BAR
companion object {
val NO_BAR = UUID.randomUUID().toString()
}
}
除非需要,否则不会创建默认的HeadDisk()
。生成的Java代码
data class Computer(var speed: Float = 0F,
var screenSize: Float = 0F,
var hardDisk: HeadDisk = HeadDisk())
是
我不知道你想要什么,你想用一个HeadDisk实例初始化它,但你不想创建一个新的HeadDisk实例?因为这就是我对你问题的解释。您希望默认值到底是什么?您的问题确实不清楚。你想看到什么样的行为?我的意思是,最后一个示例强制用户提供一个值,因此没有defalult。在第一个示例中,该属性始终是有效值,用户无需提供有效值。中间的一个允许用户提供一个值,但是如果没有,那么它必须处理空的情况。所有这些都是有效的用例,但这完全取决于您想要什么。IMHO“默认情况下”我会选择最简单的解决方案,即数字1,因为它是“最安全的类型”,使用起来更统一。但这取决于…也许我不清楚。基本上,我想为初始化类设置默认值。这就是我在构造函数中指定默认值的原因。问题是如何为类硬盘设置默认值?我希望我现在更清楚了。
class Foo
class Bar(val foo: Foo = Foo())
// $FF: synthetic method
public Bar(Foo var1, int var2, DefaultConstructorMarker var3) {
if ((var2 & 1) != 0) { // this checks whether you called it with or without that parameter
var1 = new Foo(); // a new one each time
}
this(var1);
}