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 库中的一些。