型パラメータに加えて指定できる型の一つ。
メンバでtypeキーワードによってクラスやトレイトのメンバを宣言し、そのクラスやトレイトを継承したクラスで具体的な型を宣言する。
// 抽象型を宣言した抽象クラスを宣言する abstract class Base { // 宣言するだけで実際にこれがどの型なのかはまだ決まっていない type SomethingFoo def show(something:SomethingFoo) } class Foo { def exec = println("Foo#execを実行") } class Ex1 extends Base { // さっきの抽象型にFooクラスを指定する type SomethingFoo = Foo def show(something:SomethingFoo) = something.exec } object Type { def main(args: Array[String]) { val x = new Ex1 println(x) x.show(new Foo) // Foo#execを実行 } }
めんどうなので
$ scalac type.scala && scala Type
で。