是否可以使用任意类型参数定义返回类型?

时间:2012-07-02 11:32:03

标签: scala types

假设我们有一个带有类型参数

的类
class A[T]

我们想要编写一个方法,该方法返回带有arbritrary类型参数的A类型的对象,如:

def f: A = { ... }

编译器会抱怨类型A缺少类型参数。

我们无法通过编写A[Any]来解决此问题,因为例如A[String]不是A[Any]的子类型。但是我们可以使用+T的协变注释来达到这种子类型关系。

是否可以在不使用协变注释f的情况下编写这样的方法+T

1 个答案:

答案 0 :(得分:4)

您可以使用存在类型:

def f: A[_] = { ... }

这是:

的简写
def f: A[T forSome { type T }] = { ... }

您甚至可以使用上限(或下限):

def f: A[_ <: SomeType] = { ... }

您可以为此分配任何类型T,但是,您可能无法对结果执行任何有用的操作