具有不同支持字段类型的 Kotlin 数据 class
Kotlin data class with different backing field type
我有一个简单的 class 用于 JSON 序列化。为此,外部接口使用String
s,但内部表示不同。
public class TheClass {
private final ComplexInfo info;
public TheClass(String info) {
this.info = new ComplexInfo(info);
}
public String getInfo() {
return this.info.getAsString();
}
// ...more stuff which uses the ComplexInfo...
}
我在 Kotlin 中工作(不确定是否有更好的方法)。但是 non-val/var 构造函数阻止我使用 data
.
/*data*/ class TheClass(info: String) {
private val _info = ComplexInfo(info)
val info: String
get() = _info.getAsString()
// ...more stuff which uses the ComplexInfo...
}
如何使它作为 data class
工作?
您可以组合使用在主构造函数中声明的私有 ComplexInfo
属性 和接受 String
.
的 secondary constructor
可以选择将主构造函数设为私有。
示例:
data class TheClass private constructor(private val complexInfo: ComplexInfo) {
constructor(infoString: String) : this(ComplexInfo(infoString))
val info: String get() = complexInfo.getAsString()
}
请注意,在数据 class 生成的成员实现中使用的是 complexInfo
属性。
我有一个简单的 class 用于 JSON 序列化。为此,外部接口使用String
s,但内部表示不同。
public class TheClass {
private final ComplexInfo info;
public TheClass(String info) {
this.info = new ComplexInfo(info);
}
public String getInfo() {
return this.info.getAsString();
}
// ...more stuff which uses the ComplexInfo...
}
我在 Kotlin 中工作(不确定是否有更好的方法)。但是 non-val/var 构造函数阻止我使用 data
.
/*data*/ class TheClass(info: String) {
private val _info = ComplexInfo(info)
val info: String
get() = _info.getAsString()
// ...more stuff which uses the ComplexInfo...
}
如何使它作为 data class
工作?
您可以组合使用在主构造函数中声明的私有 ComplexInfo
属性 和接受 String
.
可以选择将主构造函数设为私有。
示例:
data class TheClass private constructor(private val complexInfo: ComplexInfo) {
constructor(infoString: String) : this(ComplexInfo(infoString))
val info: String get() = complexInfo.getAsString()
}
请注意,在数据 class 生成的成员实现中使用的是 complexInfo
属性。