Scala:通用方法组合

Scala:通用方法组合,scala,generics,Scala,Generics,我刚刚开始学习scala,我对泛型非常困惑: 问题1: def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = { list.filterNot(fun) } def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = { list.filterNot(fun) } def get

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

问题1:

def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
    list.filterNot(fun)
}
def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
    list.filterNot(fun)
}
def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
    list.filterNot(fun)
}
这里的X看起来像Java的E(这段代码很好用)

问题2:

def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
    list.filterNot(fun)
}
def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
    list.filterNot(fun)
}
def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
    list.filterNot(fun)
}
为什么任何一个都不起作用。我认为Any可以接受任何类型(这不是编译)

问题3:

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

同样,这不起作用,“u”和“Any”之间的区别是什么?答案1:X是泛型类型参数。因此,方法
getRemainingItem
是一个通用方法,将使用具体的类型参数(类型实例化,如
X=Int
)调用该方法

答案2:该代码段不会编译(使用Scala 2.11测试)

答案3:对于某些{type X}(一种存在类型),类型
T[]
T[X]的快捷方式。这类似于Java通配符()。当然,说“某个未知类型T”不同于说“任何”(这是一个具体类型——顶部类型)

有关更多信息:
-
这里的X看起来像Java的E(这段代码很好)
什么
E
2
编译得很好。a time参数位置的下划线表示未知时间。因此,
列表[]
()=>布尔值
\u
是未知的,因此不一定相同。