誰かが以下のコードが機能しない理由を説明できますか?メソッドパラメータのジェネリック型の問題
scala> abstract class A[T] {}
defined class A
scala> class B {}
defined class B
scala> object C extends A[B] {}
defined object C
scala> def method(arg: A[Any]): Unit = {}
method: (arg: A[Any])Unit
scala> method(C)
<console>:14: error: type mismatch;
found : C.type
required: A[Any]
Note: B <: Any (and C.type <: A[B]), but class A is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
method(C)
私はここにA
という名前の、抽象クラスを持っている、と私は方法method
の引数として[AnythingHere]を拡張して何かを渡すことができるようにしたいと思います。 Javaではpublic void method(A<?> arg) {}
と書いていますが、?
がないので、Scalaでそれを動作させる方法がわかりません。
また、+
を+T
に追加しようとしましたが、テストして検索した結果、ここでは役立たなかったと思います。ただ、警告が事前に
おかげ
http://www.julien.richard-foy.fr/blog/2013/02/21/be-friend-with-covariance-and-contravariance/ – cchantep