KotlinとSpringBootを使って開発しています。
あるモデルクラスがあります。
以下の関数にて、Hogehoge<mogeElement>を戻り値としようとしています。
fun search(): Hogehoge<mogeElement> { Hogehoge(items, size) // itemsはList<mogeElement> // sizeはInt {
モデルクラス
class Hogehoge<out T>( val items: List<T>, val size: Int )
class mogeElement(){ 略 }
上記のsearch関数は正しく動きます。
しかし、seachクラスで条件分岐を行い、
fun search(): Hogehoge<mogeElement> { if (~~) { Hogehoge(items, size) // itemsはList<mogeElement> // sizeはInt } else { val anotherItems // List<Long>を作成 Hogehoge(anotherItems, size) } }
とすると、anotherItems
を使ったことで戻り値である、Hogehoge<mogeElement>
が返せずエラーが出ます。
ちなみに、以下の場合ではエラーが出ませんでした。
fun search(): Hogehoge<mogeElement> { if (~~) { Hogehoge(items, size) // itemsはList<mogeElement> // sizeはInt } else { Hogehoge(empltyList(), size) } }
emptyList()の実装を見てみると、以下のような感じでした。
public fun <T> emptyList(): List<T> = EmptyList
自分に認識としては、
class Hogehoge<out T>( val items: List<T>, val size: Int )
itemsがList<T>
を取るので、Hogehoge内に渡したListの型がそのまま戻り値となる、という認識でした。
つまり、一つの関数内で2つの Hogehoge(items, size)
とHogehoge(anotherItems, size)
を返すためには、
戻り値をList<Any>にするしかないと思っていました。
しかし、最後のemptyList()
を使った例だと戻り値がHogehoge<mogeElement>
のままでも大丈夫となります。
これは何故でしょうか?emptyList()の型がList<T>
ではあるのですが、search関数の戻り値がHogehoge<mogeElement>
のままで大丈夫な理由がイマイチ掴めません。
どなたか教えて頂ける方居ましたらよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 07:17
2018/11/09 07:35
2018/11/13 04:03