Java Scala中变量声明中的通用通配符

Java Scala中变量声明中的通用通配符,java,generics,scala,covariance,contravariance,Java,Generics,Scala,Covariance,Contravariance,在Java中,我可以这样做: class MyClass { private List<? extends MyInterface> list; public void setList(List<MyImpl> l) { list = l; } } 这(当然)不会编译-但是如何以这样的方式声明list变量呢 编辑;我再加一点。这种差异显然与以下事实有关:在Java中,泛型在T中从来都不是协变的,而在Scala中它们可以是协变的,也可以不是协变的。例如,

在Java中,我可以这样做:

class MyClass {
    private List<? extends MyInterface> list;

    public void setList(List<MyImpl> l) { list = l; }
}
这(当然)不会编译-但是如何以这样的方式声明
list
变量呢

编辑;我再加一点。这种差异显然与以下事实有关:在Java中,泛型在T中从来都不是协变的,而在Scala中它们可以是协变的,也可以不是协变的。例如,Scala类
列表
在T中是协变的(并且必然是不可变的)。因此,将编译以下

class ScalaClass {
   val list:List[MyInterface]  = null

   def setList(l: List[MyImpl]) = {
     list = l
   }
}
我仍然有点纠结于编译器错误:

协变类型T出现在…的逆变位置。

比如,;类声明中出现此编译器错误:

class Wibble[+T] {
  var some: T = _ //COMPILER ERROR HERE!
 }
我要问一个单独的问题…

直接模拟到

import java.util.List;
List<? extends MyInterface> list;
import java.util.List;

列表这个问题已经回答了还是还没有回答?我没有注意到你的回答,因为我不久就去度假了。很抱歉我很确定我读过“Scala中没有通配符”。曾经是这样吗?我想不是现在。。。
import java.util.List;
List<? extends MyInterface> list;
import java.util.List
var list : List[_ <: MyInterface]  = _;