私は次のようなクラスを持っています。 7行目でinit
ブロックを直接呼び出したいと思いますが、これはリフレクションを使用しないと可能ではないようです。オブジェクトのinitブロックを明示的に呼び出す方法は?
object MyClass {
var editor: Editor = getDefaultEditor()
set(value) {
field = value
//Todo: figure out how to avoid duplicating init block
project = editor.project!!
document = editor.document.charsSequence.toString().toLowerCase()
findModel = FindManager.getInstance(project).findInFileModel.clone()
findManager = FindManager.getInstance(project)
}
var project: Project
var document: String
var findModel: FindModel
var findManager: FindManager
init {
project = editor.project!!
document = editor.document.charsSequence.toString().toLowerCase()
findModel = FindManager.getInstance(project).findInFileModel.clone()
findManager = FindManager.getInstance(project)
}
}
しかし、私はsetEditor(getDefaultEditor())
でinit
ブロック内のコードを置き換える場合、コンパイラはプロパティが初期化されなければならない「、と文句を言うだろうので、インスタンス化せずにプロパティを初期化するために、init
ブロックを持っている必要がありますか抽象的である "。 init
内のすべてのものを複製することを避けるにはどうすればよいですか?
ねえ。このコミュニティをより良くするためにいくつかの答えを受け入れてください:) – mklimek