Structual Subtyping
静的ダックタイピングのようなもの
「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) } }