有没有办法在Scala中实例化带有对象的抽象类型? 我的意思是这样的:
trait Processor {
/* 1. defining a type shortcut */
type ProcessorType = RequestTrait with ResponseTrait
/* 2. defining a method with default implementation */
def retry = new ProcessorType {
override def retry = None
}
/* 3. Compilation fails */
def reRetry = new RequestTrait with ResponseTrait {
override def retry = None
}
/* 4. This one works correctly */
}
答案 0 :(得分:1)
问题在于
中的with
type ProcessorType = RequestTrait with ResponseTrait
和
class X extends RequestTrait with ResponseTrait { ... }
new RequestTrait with ResponseTrait { ... }
实际上是不同的。第一个定义了复合类型;第二个没有,它只是分开(可选)类和特征。它只允许一个类和特征,而不是任意类型。因此new ProcessorType { ... }
不合法。
这种双关语是有效的,因为第二种形式创建的类是所有列出的类/特征的子类型,也是第一种形式创建的复合类型的子类型,但它仍然只是双关语。