Передать переменные в конструктор родителя в Kotlin - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь передать переменные из дочернего класса в конструктор родителя.

Конструктор родительского класса состоит из (Context!, String!, SQLiteDatabase.CursorFactory!, Int).

Я легко могу сделать

class TodoListDBHandler(context: Context, databaseName: String, factory: SQLiteDatabase.CursorFactory, databaseVersion: Int): 
    SQLiteOpenHelper(context, databaseName, factory, databaseVersion)

, но я хотел бы указать имя базы данных и версию непосредственно внутри класса, вместо того, чтобы указывать ее каждый раз, когда я вызываю конструктор, поскольку могу ошибаться.

Мой текущий код:

class TodoListDBHandler(context: Context, databaseName: String, factory: SQLiteDatabase.CursorFactory, databaseVersion: Int): 
    SQLiteOpenHelper(context, databaseName, factory, databaseVersion) {

    val databaseFileName = "todoList.db"
    val databaseVersion = 1

    override fun onCreate(db: SQLiteDatabase?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

Как указано выше, я хотел бы иметь возможность передать указанную переменную в конструктор родителя.

EDIT:Это нужный код, но в Java

public TodoListDBHandler(Context context, SQLiteDatabase.CursorFactory factory) {
    // databaseFileName and databaseVersion are already specified inside the class
    super(context, databaseFileName, factory, databaseVersion)
}

Ответы [ 2 ]

3 голосов
/ 14 апреля 2019

Вы можете передать константные аргументы непосредственно в конструктор суперкласса.

class TodoListDBHandler(context: Context, factory: SQLiteDatabase.CursorFactory)
        : SQLiteOpenHelper(context, "todoList.db", factory, 1) {

        override fun onCreate(db: SQLiteDatabase) {
        }

        override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        }
}
1 голос
/ 15 апреля 2019

@ farhanjk дает хорошее решение, но вы также можете поместить их в объект-компаньон:

class TodoListDBHandler(context: Context, factory: SQLiteDatabase.CursorFactory): 
    SQLiteOpenHelper(context, TodoListDBHandler.databaseName, factory, TodoListDBHandler.databaseVersion) {

    companion object {
        val databaseFileName = "todoList.db"
        val databaseVersion = 1
    }

    ...
}

Это может быть полезно, например, при нетривиальной инициализации или для создания списка только один раз,и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...