2017-05-12 15 views
1

を上限を繰り返す必要があり、私はこのようになります特色があります:「私はできる、私はprocess[D >: T](doc: D)processメソッドを宣言するとScalaの共変の型宣言はexlplicitly

trait Processor[+T <: Document] { 
    def process[D >: T <: Document](doc: D) 
} 

Documentクラスのメソッドにアクセスしないでください。

私はprocess方法では、<: Document、上限を繰り返す必要がない理由を私は知りません。

ので、二つの質問:

  1. これは、使用されることになっています方法は何ですか?
  2. なぜ型システムは特性定義から上限を自動的に取り上げませんか?
+0

'process [D>:T](doc:D)'において、 'D'は' Document'のサブタイプである 'T'のスーパータイプなので、' D'は必ずしも 'Document' 。 – Harald

答えて

2

ではなく、Dに上限があります。その上限を置かないとしたら、Dは、Tも、たとえばAnyであることがあります。したがって、コンパイラはDAnyであると仮定しなければならないため、さらに多くのメソッドを提供することはできません。

+0

ハハ、そうです。今私はその質問に愚かな気がする。ありがとう。 –