Javaと同様Kotlinにもジェネリクスがあります。
ジェネリクスは基本型を定義し、それを凡庸型に落とし込むことができる機能です。
たとえば、クラスのプロパティの型を決めずに、クラスを作成する際に型を決めることができます。
Androidでいうと、関数の返り値を柔軟に扱いたい、APIで使用するAsyncTaskなどに使います。
では、例を見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fun main(args: Array<String>) { // 1.ジェネリクスによりIntに変換してくれる var val1 = Container<Int>(1) // 2.ジェネリクスによりStringに変換してくれる var val2 = Container<String>("string") // 1 println(val1.value) // string println(val2.value) } // 3.ジェネリクス定義方法 class Container<T>(var value: T) { } |
3.ジェネリクス定義方法
Containerのプロパティvalueの型を凡庸型にしたいため、
valueにジェネリクスを使用しています。
ジェネリクスの定義方法は以下になります。
class クラス名<定義型(主にTを使用)>(変数型 変数名 : 定義型){
}
ここで、宣言しているTはTypeを表すTで、特に指定はありませんが、
Tで宣言することが一般的なようです。
1.2.の例では、クラスを作成する際にTを利用し、それぞれ、Int・String型として、valueを利用しています。
このようにジェネリクスを使うことで、Int、Stringという風に複数の型を定義することなく、
型にこだわらず、柔軟に定義することができました。