具有不同后备字段类型的Kotlin数据类

时间:2018-02-13 11:40:20

标签: kotlin data-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工作(不确定是否有更好的方法)。但是非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工作?

1 个答案:

答案 0 :(得分:2)

您可以使用在主构造函数中声明的私有ComplexInfo属性和接受String的{​​{3}}的组合。

(可选)将主构造函数设为私有。

示例:

data class TheClass private constructor(private val complexInfo: ComplexInfo) {

    constructor(infoString: String) : this(ComplexInfo(infoString))

    val info: String get() = complexInfo.getAsString()
}

请注意,它是数据类生成的成员实现中使用的complexInfo属性。