10

java から使用すると、すべての scala vararg メソッドが変数の Seq を受け入れるように見え、Java ネイティブの vararg メソッドとして使用できないのはなぜですか。これはバグですか?

たとえば、Bufferhas method def append(elems: A*): Unit. しかし、Java では別の署名があります: void append(Seq<A>).

4

3 に答える 3

17

scala コードを制御する場合は、@varargs を使用して Java 互換の varags メソッドを生成できます。@varargs def append(elems: A*): Unit = {}

于 2012-10-31T15:02:18.570 に答える
8

これはバグではありません。これは、Java との相互運用性よりも Scala 内での vararg の使用を優先する設計上の選択です。たとえば、途中で aListに変換することなく、Scala varargs メソッドに aを渡すことができますArray

Java から Scala varargs を使用する必要がある場合は、代わりにいくつかの scala Seq を作成する必要があります。たとえば、Java ラッパーを作成して配列を自動的に作成し、オブジェクトのgenericWrapArrayメソッドを使用することができます。Predef

于 2011-11-29T15:07:27.890 に答える
-6

Seqを使用してvarargsに簡単にキャストできます:_*。例えば ​​:

val b = collection.mutable.ListBuffer.empty[Int]
b.append(List(1, 2):_*)

したがって、これにより、コレクションAPIでのコードの重複が回避されます。

単に使用することもできますappendAll

b.appendAll((List(1, 2))
于 2011-11-29T10:54:57.117 に答える