1

私が書いたJavaジェネリックコレクションを再利用しようとしていますが、次のようになります。

public class Blah<T>
   implements List<T>
{
...
   public void test(T[] array) {
   ...
   }
...
}

上記を使用する Scala ジェネリック コレクションから使用すると、コンパイル エラーが発生します。ここで、Blah クラス メソッドが T ではなく T と java.lang.Object を予期していることに気付きました。

Object MyStaticObject {
   def test[T](array: Array[T]) = { 
      val x = new Blah[T]();
      x.test(array) // <- error here: Overloaded method with alternatives test[T with java.lang.Object] ... cannot be applied
}

Scala で Blah クラスを書き直さずにこの状況を回避する方法はありますか? (それは機能しますが、私はそのようなJavaコードが多すぎて、全体を移植していません...)

おそらく、何らかの暗黙の定義が助けになるのではないでしょうか? ありがとう!

4

1 に答える 1

7

制限def test[T <: AnyRef] することでうまくいきます。

当然のことながら、汎用Javaメソッドは、たとえばint[]Array[Int])パラメーターを受け入れるべきではありません。 Blah[Int]と見なされますBlah<Integer>Array[Int] はint[]、ではありませんInteger[]

于 2012-04-03T20:23:36.340 に答える