2017-11-02 16 views
1

スカラにオブジェクトを持つ抽象型をインスタンス化する方法はありますか?スカラにオブジェクトを持つ抽象型

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 */ 
} 
+1

[Scalaで型エイリアスからオブジェクトを作成する](https://stackoverflow.com/questions/26720506/creating-objects-from-type-alias-in-scala) – stefanobaghino

+0

いいえ、それは実際に重複していませんこの問題はここでは扱いません。 –

答えて

1

問題が

type ProcessorType = RequestTrait with ResponseTrait 

class X extends RequestTrait with ResponseTrait { ... } 
new RequestTrait with ResponseTrait { ... } 

with sが実際に異なっているということです。 私は何を意味することは、このようなものです。最初は複合型を定義します。 2番目の方法は、(オプション)クラスと特性を分けるだけではありません。それは、任意のタイプではなく、クラスと特性のみを許可します。だから new ProcessorType { ... }は法的ではありません。

2番目のフォームで作成されたクラスは、リストされているすべてのクラス/特性のサブタイプであり、最初のフォームで作成された複合タイプのサブタイプですが、それでもややこしいです。

関連する問題