Future[Any] 和 Future[_] 的区别
Difference between Future[Any] and Future[_]
好的,我想标题中的问题已经完成了。
没什么大不了的,但我只是想知道。我有一个方法 return 是一个正确的值或一个错误代码枚举项。例如这样的事情:
def doMyStuff(): Future[_] = {
val result = db.queryMyData().map {
case some(data) =>
val modifiedData = data.doStuff()
modifiedData
case None =>
Errors.THIS_IS_FALSE
}
result
}
其中 db.queryMyData()
return 是 Future,data.doStuff()
只是修改数据。
现在我凭直觉写了Future[_]
,因为return值是灵活的。但是在查看其他库时,我看到 Future[Any]
被使用了。这似乎也是合乎逻辑的,当您在函数的 return 上使用 match-case 来检查它是哪个数据时。
使用它的代码例如是这样的:
doMyStuff().map {
case data: MyDataType => // Blah blah
case Errors.Value => // error handling
}
所以,我的问题是:这里使用 Any 或 _ 有什么区别,为什么要使用 正确一个?
这是语义问题:
Existential TypeT[_]
表示在_
的位置有一个class/type我根本不关心但是它必须在那里。
T[Any]
表示必须有子class Any
存在。
当您想序列化底层 class 时,区别就开始发挥作用了。
如果你只是使用 _
而没有任何类型限制,你将无法使用许多 Scala JSON 库中的一些。
好的,我想标题中的问题已经完成了。 没什么大不了的,但我只是想知道。我有一个方法 return 是一个正确的值或一个错误代码枚举项。例如这样的事情:
def doMyStuff(): Future[_] = {
val result = db.queryMyData().map {
case some(data) =>
val modifiedData = data.doStuff()
modifiedData
case None =>
Errors.THIS_IS_FALSE
}
result
}
其中 db.queryMyData()
return 是 Future,data.doStuff()
只是修改数据。
现在我凭直觉写了Future[_]
,因为return值是灵活的。但是在查看其他库时,我看到 Future[Any]
被使用了。这似乎也是合乎逻辑的,当您在函数的 return 上使用 match-case 来检查它是哪个数据时。
使用它的代码例如是这样的:
doMyStuff().map {
case data: MyDataType => // Blah blah
case Errors.Value => // error handling
}
所以,我的问题是:这里使用 Any 或 _ 有什么区别,为什么要使用 正确一个?
这是语义问题:
Existential TypeT[_]
表示在_
的位置有一个class/type我根本不关心但是它必须在那里。
T[Any]
表示必须有子class Any
存在。
当您想序列化底层 class 时,区别就开始发挥作用了。
如果你只是使用 _
而没有任何类型限制,你将无法使用许多 Scala JSON 库中的一些。