Scala:通用方法组成

时间:2015-12-10 19:03:29

标签: scala generics

我刚刚开始学习scala,我对Generics非常困惑:

问题1:

def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
    list.filterNot(fun)
}

这里的X看起来像是Java的E(这段代码工作正常)

问题2:

def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
    list.filterNot(fun)
}

为什么不能正常工作。我在想任何人都可以接受任何类型(这不是编译)

问题3:

def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
    list.filterNot(fun)
}

这又不起作用,“_”和“任何”

之间有什么区别

1 个答案:

答案 0 :(得分:0)

答案1 :X是泛型类型参数。所以方法getRemainingItem泛型方法,它将使用具体类型参数类型实例化,例如{{1}来调用}})。

回答2 :该代码段确实编译(使用Scala 2.11测试)

回答3 :类型X = IntT[_]的快捷方式(存在类型)。这类似于Java 通配符https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html)。当然,说"一些未知的类型T"不同于说"任何" (这是一种具体类型 - 顶级类型)。

了解更多信息: - What is an existential type?