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という風に複数の型を定義することなく、
型にこだわらず、柔軟に定義することができました。