【Kotlin】イベントリスナの書き方

【Kotlin】イベントリスナの書き方

目次

C#でいうところの、Funcdelegateの機能をさしています。

Kotlinでは、delegateというと別とまではならないものの、想像している機能と違う機能が出てくるので、注意が必要です。

二つの言語に共通しているこの機能のようのものを表している単語は、関数オブジェクトになるかと思います。

イベントリスナの基本

イベントリスナとは、イベントが発生したときに呼ばれるメソッドを持つクラスのことをさします。

このイベントリスナークラスを外部から設定することができるようになっていることで、イベントを呼び出す側は、実際の処理と汎用的な処理を分離して記述できるようになります。

実装例

この実装例では、Kotlin(Android)を例としています。onCreateメソッドがエントリーポイントだと考えてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//  実装したいイベントをインターフェイスとして定義
interface Itest{
fun Test1()
fun Test2()
}

// イベントを使用するクラス
class Test {

// イベントリスナー
// 外部で設定されるはずのクラス
// Iterfaceで定義しているので、このクラスで呼び出すであろう関数の強制ができる
// 最初は設定されていないのでnullを設定
var action:Itest? = null

fun CallTest1(){
// nullの場合は呼ばれない
action?.Test1()
}

fun CallTest2(){
// nullの場合は呼ばれない
action?.Test2()
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

test = Test()

// ITestインターフェースを実装した無名オブジェクトを生成して、Testクラスのaction1へ割り当て
test.action = object: Itest{
override fun Test1() {
Log.d("Test","テスト1が呼ばれました")
}

override fun Test2() {
Log.d("Test","テスト2が呼ばれました")
}
}

// イベントが発火する処理を実行
test.CallTest1()
}
ウンチtest
1
2
+ aaa
- aa
c++ 実行結果test
1
2
+ int main(){
- int main()
c++ 実行結果test
1
2
+ int main(){
- int main()
Author

Daiki Iijima

Posted on

2022-10-07

Updated on

2024-04-17

Licensed under