有人可以解释为什么下面的代码不起作用吗?方法参数中的泛型类型问题
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
,我希望能够通过任何扩展A [AnythingHere]作为参数传递给方法method
。在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