Scala 中的 ?0 类型是什么?

What is the ?0 type in Scala?

scala> Try(Class.forName("scala.util.Try"))
warning: there was one feature warning; re-run with -feature for details
res54: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)

谁能解释一下 ?0 类型是什么?当我尝试在代码中使用它时,无法编译。

val tryMongo: Try[Class[?0]] = Try(Class.forName(MONGO_COLLECTION_CLASS))

这通常出现在 existential type,所以尝试:

scala> val tryMongo: Try[Class[`?0`]] forSome { type `?0`} = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)

请注意,您可以选择任何名称,例如 TA 而不是 ?0 - 这只是编译器消息的约定(选择 ? 可能是因为Java 中使用相同的符号)。您还可以使用快捷方式 XXX[_],它完全等同于 XXX[T] forSome { type T }:

scala> val tryMongo: Try[Class[_]] = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[_]] = Success(class scala.util.Try)