2017-11-16 15 views
0

が、私はこの機能のためにそれを知っているタイトルのエラーを理解していないと予想しました私はこのような機能を呼び出すことが義務づけられています:型の不一致は、ListBufferは[任意]、実際のListBuffer [CustomClass]

myFunction(
    objectList.asInstanceOf[ListBuffer[Any]], 
    customObject 
) 

はListBufferのparamのための不一致型エラーを生成しますeter。 ですから、CustomObject => AnyはOKですが、ListBuffer [CustomObject] => ListBuffer [Any]はありませんか?

あなたはListBuffer[SuperTypeOfA]からListBuffer[A]を割り当てることはできませんのでListBufferは不変であるので、その理由はListBufferある

答えて

0

スカラーのキーワードであるパラメータ名オブジェクトを使用しています。

def myFunction(objectList: ListBuffer[Any], customObject: Any): Boolean = {...} 

オブジェクトをパラメータ名として使用する場合は、その前に傾き記号を使用します。

def myFunction(objectList: ListBuffer[Any], `object`: Any): Boolean = {...} 

その他の問題は、asInstanceOfを使用して作成できないことです。だから、変更ListBuffer [任意]にListBuffer [CustomClass]

def myFunction(objectList: ListBuffer[CustomClass], customObject: Any): Boolean = {...} 
0

うーん、そうか、これが使用するのは良いのコレクションではなく、そこにあるより良いどちらか私はひどくそれを使用し、機能にそれを与えない必要がありますが、代わりに関数に初期化する? 、あなたがしたいことがあり、実際には同じことになっている

def myFunction(objectList: Seq[Any], object: Any): Boolean = {...} 
0

CustomObject場合とCustomClass(またはCustomObjectCustomClassのサブタイプである):次のように関数を定義するので、私は、配列を想定

は共変です、これは動作します一般的なように機能を変更します。

def myFunction[A](objectList: ListBuffer[A], object: A) = ... 

そうでなければ、問題はmyFunctionListBuffer[Any]に何かを置くことができるということですが、合格した場合ListBuffer[CustomClass]の場合は、タイプCustomClassの値しか入れられません。これはなぜListBufferが不変であるかを説明します。

myFunctionBufferに何かを置くつもりされていない場合は、あなただけの共変である、Seq(あるいは、より一般的なタイプ)を使用することができます。それはSeqを拡張するので、そこにListBufferを渡すことができるでしょう。一般に、最も一般的な可能な型をメソッドの引数に与えるのは良い方針です。

関連する問題