Scala中的协方差-不理解示例
我正在读这篇文章。。。 我不明白以下两者之间的区别Scala中的协方差-不理解示例,scala,Scala,我正在读这篇文章。。。 我不明白以下两者之间的区别 def sayHi(people:List[Person]) = people.map { println _ } def sayHi[T <: Person](people: List[T]) = people.map { println _ } def sayHi(people:List[Person])=people.map{println} 德夫萨伊[不要忽略那篇博文。这些示例都是糟糕的代码,对解释没有帮助。请尝试。使用第二种
def sayHi(people:List[Person]) = people.map { println _ }
def sayHi[T <: Person](people: List[T]) = people.map { println _ }
def sayHi(people:List[Person])=people.map{println}
德夫萨伊[不要忽略那篇博文。这些示例都是糟糕的代码,对解释没有帮助。请尝试。使用第二种方法有很好的理由,但博文没有探讨它。它允许您在方法签名中使用T
,而不仅仅是不太明确的人
。也就是说,您可以返回一个Employee
谢谢ggovan。我做了一些其他的调查,现在理解得更好了一些。Scala中的列表类型是协变的,所以这就是为什么前者可以在上面工作的原因,但是如果您使用的是java.util.List,它是不变的,那么它将不会,也就是说,您将无法将java.util.List[Employee]传递给java.util.List[Person]类型你说得对,这不是一篇很有说明性的文章,我会去代码学校看看。