メソッドパラメータの型指定でHigher Kinded Typesを使う
やりたいこと
メソッドのパラメタで、Mapを使いたい。
で、Mapのキー(または値)の型を明示的にしておきたくない。
いくつかの種類の型をキー(または値に持てるようにしておきたい)
解決法
Higher Kinded Typesを使う。
日本語にすると、「高階型変数」というらしい。。。(絶対に、一発で変換できない漢字だ)
def func(map_arg: Map[String,Float]): Unit = println(Map.keys())
val map_input = Map[String, Int]
func(map_input)
とかすると、「定義されたパラメタと入力のパラメタが違うで」と怒られる。
パラメタを抽象化(?)するには
def func(map_arg: Map[String,_]): Unit = println(Map.keys())
val map_input = Map[String, Int]
func(map_input)
とすると通った。
こういう風に(どういう風なんだ。。)パラメタを抽象化(?)してしまうことをHigher Kinded Typesと呼ぶのだとか。
Javaでも同じ表記でいけるらしい。
Javaをほとんど書いたことないので、知らなかった。。。