假设我们有一个带有类型参数
的类class A[T]
我们想要编写一个方法,该方法返回带有arbritrary类型参数的A
类型的对象,如:
def f: A = { ... }
编译器会抱怨类型A
缺少类型参数。
我们无法通过编写A[Any]
来解决此问题,因为例如A[String]
不是A[Any]
的子类型。但是我们可以使用+T
的协变注释来达到这种子类型关系。
是否可以在不使用协变注释f
的情况下编写这样的方法+T
?
答案 0 :(得分:4)
您可以使用存在类型:
def f: A[_] = { ... }
这是:
的简写def f: A[T forSome { type T }] = { ... }
您甚至可以使用上限(或下限):
def f: A[_ <: SomeType] = { ... }
您可以为此分配任何类型T
,但是,您可能无法对结果执行任何有用的操作