价值类别 http://docs.scala-lang.org/overviews/core/value-classes.html可用于实现类型安全,而无需拆箱的开销。
我的印象是,在运行时,此类类型/类将“不存在”,被视为简单类型(例如,值类case class X(i: Int) extends AnyVal
将是一个简单的Int
在运行时)。
但如果你确实打电话给.toString
值类实例上的方法,它会打印如下内容:
scala> val myValueClass = X(3)
myValueClass: X = 3
scala> myValueClass.toString
res5: String = X(3)
所以我猜编译器毕竟包含了一些信息?
并不真地。编译器创建一个静态方法(在 Scala 中,这对应于类的伴生对象),使用 int 值作为参数来调用该方法,以模拟调用值类类型对象上的方法。
您的值类本身仅存在于源代码中。在编译的字节码中,使用实际的原始 int 并调用静态方法,而不是使用实际方法调用的新对象实例。您可以阅读有关此机制的更多信息here http://www.blog.project13.pl/index.php/coding/1769/scala-2-10-and-why-you-will-love-implicit-value-classes/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)