12

私は Kotlin でデータ クラスを使用して、それ以外の方法で作成する必要がある Java コードの量を大幅に削減しています。

しかし、私の Java クラスの 1 つで、Kotlin で同じ結果を得るために何をすればよいかわかりません。

私の Java クラスは次のようになります。

public class DataObject {

    private int mId;
    private String mName;

    public DataObject(int id, String name) {
        mId = id;
        mName = name;
    }

    public DataObject(Context context, int id) {
        mId = id;
        Cursor cursor = ...
        cursor.moveToFirst();
        mName = cursor.getString(...);
        cursor.close();
    }

    public int getId() {
        return mId;
    }

    public String getName() {
        return mName;
    }

}

Kotlinで書き直そうとしましたが、これまでのところ次のとおりです。

data class DataObject(val id: Int, val name: String) {

    constructor(context: Context, id: Int) : this(id, fetchName(context))

    private fun fetchName(context: Context): String {
        val cursor = ...
        cursor.moveToFirst()
        val name = cursor.getString(...)
        cursor.close()
        return name
    }

}

fetchName(context)しかし、私の IDE (Android Studio) は、constructor赤で呼び出す部分に下線を引いています。次のメッセージが表示されます。

fetchNameスーパークラス コンストラクターが呼び出される前にアクセスできません

この問題を解決するにはどうすればよいですか?

4

2 に答える 2