在Scala中,有两种方式可以用来支撑高阶对象。
1. 类型参数:
trait DataOps[A] { def show(a: A) = println(a) } val numbericOps = new DataOps[Int]{}
特质上有一个泛型A,当实例化类型的时候可以填入
2. 延迟定义到子类
trait DataOps { type A def show(a: A) = println(a) } val numbericOps = new DataOps { override type A = Int }
特质上没有定义泛型,而是需要在子类中定义type A的具体类型
两种方法都能达到同一目的,如何取舍在于子类的类型是否稳定,如果变化很大,或者个数众多的话不建议使用第二种。