[Android][Kotlin] EventListenerを継承したInterfaceのインスタンス化でdoes not have constructorsと言われる

Googleの公式言語がJavaからKotlinに変更されて久しい。今までJavaで行こうかなと思ってたけど、objective-cからswiftへ、javaからKotlinへなんて、世の中の流れを見ていると、互換性が保たれているとは言え、古い言語を使っていると情報がなくなり、老害扱いされかねないので、今年度はチョットずつでも変えて行こうと心に誓った(遅すぎ笑)

まず、勉強がてら、今までの簡単なjavaで書いていたクラスをKotlinで書いていこうと思って躓いたことを記録していく。文法がらみはネットで探せば大体わかるし、nullセーフな言語ということも理解できる。最初に躓いたのはEventListenerを継承した独自のInterfaceのインスタンス化だった。つまりは匿名クラスの書き方で躓いた。

1
2
3
4
interface CheckQuesDBListener : EventListener{
fun checkOK(msg : String)
fun checkError(msg : String)
}

上のようなリスナーを定義して、匿名クラスを書くには

1
2
3
4
5
6
7
8
9
10
11
12
13
14
val lis = object : CopyDBListener{
override fun copyStart(){
//println("コピー開始")
}

override fun copyFin(){
//println("コピー終了")
}

override fun copyError(msg: String) {
//println("コピーエラー")
}

}

のようにインスタンス化して、lisを渡してやればいい。EventLisnerに限ったことではないけど。。