Pri*_*osK 5 parameters types scala function-declaration
考虑一下我们有:
abstract class FlyingObject;
case class Rocket(name: String) extends FlyingObject;
Run Code Online (Sandbox Code Playgroud)
这两个函数声明之间有什么区别:
def launch[T <: FlyingObject](fo: T)
Run Code Online (Sandbox Code Playgroud)
和
def launch(fo: FlyingObject)
Run Code Online (Sandbox Code Playgroud)
如果使用哪种类型的声明,那将是一些很好的例子......
[UPDATE]
在那里可以找到另一个很好的例子和解释.这是你应该使用上限而不仅仅是派生类作为参数的另一个例子.
拥有一个比FlyingObject更具体的T可能是有用的.也许想象你有一个方法
def modifyName(fo: FlyingObject, newName: String): FlyingObject = fo.copy(name=newName)
Run Code Online (Sandbox Code Playgroud)
返回带有修改名称的FlyingObject的副本.这使得这段代码不是类型检查:
val newRocket: Rocket = modifyName(oldRocket, "new name")
Run Code Online (Sandbox Code Playgroud)
由于modifyName返回FlyingObject而不是Rocket.代替:
def modifyName[T <: FlyingObject](fo: T, newName: String): T = fo.copy(name=newName)
Run Code Online (Sandbox Code Playgroud)
当Rocket传入时,将返回Rocket.
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |