静的ダックタイピングのようなもの
「Tはxxメソッドを持っていればいい型」のようなことができる
ベター Generics です
object Foo { def name = "Foo" }
object Bar { def name = "Bar" }
object Main {
def dispName(x :{def name: String}) = println(x.name)
def main(args : Array[String]): Unit = {
dispName(Foo)
dispName(Bar)
}
}
Foo Bar
List などの型引数にも指定できる
object Foo { def name = "Foo" }
object Bar { def name = "Bar" }
object Main {
def main(args : Array[String]): Unit = {
val ls = List[{def name: String}](Foo, Bar)
ls.foreach(x => println(x.name))
}
}
type alias もできるので、こう書ける
object Foo { def name = "Foo" }
object Bar { def name = "Bar" }
object Main {
type HasName = {def name: String} // nameを持ってる型
def dispName(x: HasName) = println(x.name)
def main(args : Array[String]): Unit = {
val ls = List[HasName](Foo, Bar)
ls.foreach(dispName)
}
}