Lai*_*uan 6 scala existential-type
当我尝试编写一个接受any Class[_]作为参数的类时:
case class A(klass: Class[_])
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
test.scala:1:警告:推断的存在类型选项[类[_ $ 1]] forSome {type $ 1},不能用通配符表示,应该通过使隐式值scala.language.existentials可见来启用.这可以通过添加import子句'import scala.language.existentials'或通过设置编译器选项-language:existentials来实现.有关为何应明确启用该功能的讨论,请参阅scala文档以获取值scala.language.existentials.case class A(klass:Class [ ])^找到一个警告
我愿意知道为什么它不起作用.但是"scala docs for value scala.language.existentials"在哪里?我用谷歌搜索"scaladoc scala.language.existentials",但得到了一些我无法理解的线索.
澄清:我知道实现这样一个类的"正确"方法是:
case class A[T](klass: Class[T])
Run Code Online (Sandbox Code Playgroud)
但我想知道警告信息的含义.
在这种情况下,您要寻找的是ClassTag:
class A[T](implicit val tag : reflect.ClassTag[T])
Run Code Online (Sandbox Code Playgroud)
这为您提供了ClassTag通用参数的对象,您可以Class在创建对象时使用该对象来访问给定的参数。
至于存在主义,你可以检查:
| 归档时间: |
|
| 查看次数: |
2293 次 |
| 最近记录: |