メソッドパラメータの型指定で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をほとんど書いたことないので、知らなかった。。。