2011-08-25 159 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