【发布时间】:2016-09-11 10:35:16
【问题描述】:
在this answer 中说...
// Universal types let you write things like:
def combine[T](source: List[T], dest: List[T]): List[T] = {
source ++ dest
}
但我不明白解释。
有人能解释一下上面的通用类型示例和下面的一些类似示例(包含存在类型)之间的区别吗?
def combine2[_](source: List[_], dest: List[_]): List[_] = {
source ++ dest
}
def combine3(source: List[_], dest: List[_]): List[_] = {
source ++ dest
}
def combine4[A, B](source: List[A], dest: List[B]): List[_] = {
source ++ dest
}
def combine5[T](source: List[T], dest: List[T] forSome {type T}): List[T] forSome {type T} = {
source ++ dest
}
Java 衡量标准...
public static List<?> combine6(final List<?> source, final List<?> dest) {
return source;
}
// Why doesn't this compile?
public static <T> List<T> combine7(final List<?> source, final List<?> dest) {
return source;
}
另外,如果我提供类型标签,那是否以任何方式取代了对存在类型的需求?
def combineTypetag[A, B, C](source: List[A], dest: List[B])
(implicit tagA: TypeTag[A], tagB: TypeTag[B], tagC: TypeTag[C]): List[C] = {
source ++ dest
}
【问题讨论】:
标签: java scala existential-type