在Scala中,除了class、trait、object 会产生类型,还可以用type关键字声明类型。
- type 声明别名(alias)(通常用于声明复杂类型或定义一个抽象类型):
scala> type S = String
defined type alias S
声明复杂类型 (如:声明一个结果类型):
type T = Serializable { type U; def foo(): Unit }
U是一个抽象类型。T类型的具体实例,如下:
scala> object A extends Serializable{ type X=String; def foo(){} } scala> typeOf[A.type] <:< typeOf[T] res19: Boolean = true
抽象类型:
scala> trait A { type T ; def foo(i:T) = print(i) } scala> class B extends A { type T = Int } scala> val b = new B scala> b.foo(200) 200 scala> class C extends A { type T = String } scala> val c = new C scala> c.foo("hello") hello