2017-11-30 2 views
0

を拡張し、私が混在するJava/Scalaのプロジェクトを持っている私たちはScalaのマップ値は、このメソッドインタフェース

public void setNumbers(Map<Integer, ? extends COSObjectable> numbers) { 
... 
    } 

を呼び出しているJavaライブラリであり、私はScalaのクラスに、Javaクラスから動作するコードを移動し、今私がすることができますScalaからこの呼び出しを取得する必要はありません。 org.apache.pdfbox.pdmodel:私を得ることができました最高のは、必要な

クラスタイプではなく、java.util.HashMapを[整数、_ <でコンパイルに失敗している

val numbers = new util.HashMap[Integer, _ <: COSObjectable ] 
    node.setNumbers(numbers) 

です。 common.COSObjectable]マップのCOSObjectableパラメータは、私はインターフェイスを使用する場合Scalaはこの構文を好きかわからないJavaインターフェイス

public interface COSObjectable { 
    COSBase getCOSObject(); 
} 

ある

を見つけました。私はクラスでしかできないと言っているようです。

答えて

1

私は多分私はちょうど< _を脱いで、あまりにもハードしようとしていたと思う:私はそれをして動作させることができました

val numbers = new util.HashMap[Integer, COSObjectable ] 
0

を動作するようです:

object Tes { 
    case class RandomStuff() 
    val numbers = new java.util.HashMap[Integer, _ <: RandomStuff ] 
} 

または

trait COSObjectable { 
    def getCOSObject: Nothing 
    } 

    val numbers: Map[Integer, _ <: COSObjectable ] = Map.empty 
0

クラスをインスタンス化するときは、ワイルドカードではなく特定の型を使用する必要があります。 Javaのようにすることはできませんnew util.HashMap<Integer, ? extends COSObjectable>あなたは同等のことを行うことができますnew util.HashMap[Integer, _ <: COSObjectable]

new util.HashMap[Integer, COSObjectable](または必要なサブタイプはCOSObjectable)のようなacutalタイプを指定する必要があります。

関連する問題