なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Kotlinであるinterfaceを実装したサブクラスを関数の返り値に設定する方法

意外にネット上に情報がなかった

  • Kotlinはfunのあとに型引数をとれるので、そこで以下のようにやるとインターフェースを実装したTを返り値にとれる
fun <T: インターフェース名> hoge(): T {}
  • あとは関数内で生成した対象をas Tしてやる
  • その際の警告はアノテーション@Suppress("UNCHECKED_CAST")をつけると抑制される
    fun <T : BaseInterface> build(): T {
        @Suppress("UNCHECKED_CAST")
        return generateA() as T
    }