2011-08-25 126 views

回答

7

A不是抽象的。如果它是抽象的,然后它会看起来像:

abstract class A { 
    type R 
} 

trait A { 
    type R 
} 

现在,我不能在规范中找到它(没有多少运气在那里找到的东西最近)但我以前见过这个。如果没有使用该类型,那么它看起来好像没有被评估,这意味着缺乏完整性不是问题。

如果你真的想要A是抽象的,可以使用上述定义之一来代替。

+2

这是正确的 - 具体类可以有抽象类型。事实上,即使抽象类型用在方法签名中,它仍然会编译。只是在类型在子类中定义之前,方法不能被调用。 – axel22

2

只是为了阐述@ alex22的评论:

scala> trait T { type R; def foo(r: R) = r } 
defined trait T 

scala> new T{}.foo("") 
<console>:12: error: type mismatch; 
found : java.lang.String("") 
required: _6.R where val _6: java.lang.Object with T 
       new T{}.foo("") 
         ^

scala> new T{ type R = String }.foo("") 
res37: java.lang.String = "" 
0

抽象类型似乎有默认值Nothing