Far*_*deh 6 java kotlin data-class
我在Kotlin中使用数据类来显着减少我不得不写的Java代码量.
但是,在我的一个Java类中,我不知道如何在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;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在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
}
}
Run Code Online (Sandbox Code Playgroud)
但我的IDE(Android Studio)正在强调fetchName(context)
我constructor
用红色调用的部分.它显示以下消息:
fetchName
在调用超类构造函数之前无法访问
我该如何解决这个问题?
mie*_*sol 10
您只能在完全构造的对象上使用成员函数.解决这个问题的一种方法是使用私有扩展函数或只是一个函数来获取名称:
private fun Context.fetchName(): String {
///...
return cursor.getString(1)
}
data class DataObject(val id: Int, val name: String) {
constructor(context: Context, id: Int) : this(id, context.fetchName())
}
Run Code Online (Sandbox Code Playgroud)
虽然我确实认为使用Cursor
有点太重了constructor
.我会Factory
像这样单独使用:
data class DataObject(val id: Int, val name: String) {
object FromCursorFactory {
fun create(id: Int, context: Context): DataObject {
val name = context.fetchName()
return DataObject(id, name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
归档时间: |
|
查看次数: |
2551 次 |
最近记录: |