什么是 Scala 中的 ?0 类型?

3
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))

1个回答

4

通常出现在存在类型中,因此请尝试:

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)

forSome { type ?0 } 是什么?匿名类型还是其他什么东西? - Abhijit Sarkar
@AbhijitSarkar 这里有一些解释:http://www.drmaciver.com/2008/03/existential-types-in-scala/ - dk14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接