何时在Scala中使用存在类型?

Saw*_*yer 9 scala

为方法提供以下内容:

def beCool[T <: S](args:Array[T]) = {}
def beCool(args:Array[T forSome {type T <:S}]) = {}
Run Code Online (Sandbox Code Playgroud)

它们是等价的吗?你能不能给我一些例子呢?

0__*_*0__ 3

我认为,每当您需要访问T. 最简单的示例是返回 args 的元素:

def beCool(args: Array[T forSome { type T }]): T = args.head // --> not found: type T
def beCool[T](args: Array[T]): T = args.head // ok
Run Code Online (Sandbox Code Playgroud)

T当您使用通配符时,第一个类型中不存在可访问类型会更加明显:

def beCool(args: Array[_ <: S]) = ???
Run Code Online (Sandbox Code Playgroud)