3

Java で次のクラスが定義されているとします。

public class A
{
  public class B
  {
  }

  public B[] someFunc() {...}
}

そして、次のようにscalaでアクセスしようとしています:

val array: Array[A#B] = a.someFunc()

コンパイラから次の警告が表示されます。

*型の不一致; found : Array[aB] required: Array[A#B] 注: aB <: A#B ですが、クラス Array は型 T では不変です。 `_ <: A#B* などのワイルドカード型を調べたいと思うかもしれません

このエラーを回避するために使用すべき正しい構文がわかりません。以下を使用してみましたが、コンパイルされません。

val array: Array[T <: A#B] = a.someFunc()

しかし、私はそれを関数に渡すことで問題を解決する方法を見つけました:

def test[T <: A#B](array: Array[T]) = ...
test(a.someFunc())

これは正常にコンパイルされます。

このテスト関数を定義せずに、正しい型割り当てを達成するにはどうすればよいでしょうか?

ありがとう

デス

4

1 に答える 1