我有以下几点:
def someFunc(value: MyType = MyType()): MyType
以下是否有任何不同:
def someFunc[T >: MyType](value: T = MyType()): T
最佳答案
让我们看看如果我拿一个 String
会发生什么并尝试将其传递给 someFunc[T >: MyType]
:
定义:
trait MyType
def someFunc[T <: MyType](value: T = new MyType { }): T = value
调用:
someFunc("hello")
产量
hello
这怎么可能?因为您已指定
MyType
成为 lower bound为 T
,这意味着我们有 MyType >: T <: Any
.这对 String
有何作用?如果我们查看类型 T
成为 AnyRef
, String
的父类(super class)型,然后是 MyType >: AnyRef <: Any
关系类型检查。回答您的问题:不,它们不相同,因为我无法通过
String
到第一种方法 MyType
.如果你想问的是:
def someFunc[T <: MyType]
和
def someFunc(value: MyType)
是等价的,意思是
T
有一个上限而不是下限,那么现在这两种方法都要求您传递 MyType
的子类型,但这里真正的区别在于该方法的返回类型始终至少与 MyType
一样具体。 ,如果您想对具体类型进行操作,这可能很有用。
关于scala - (泛型)之间有什么区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887631/