Tuesday, 14 March 2017

scala value class vs ref class

Scala Value class vs Ref class

Int (including FloatDoubleChar etc) is a value class in scala, which is totally different thing than Null trait when you do val x: Int = null.
final abstract class Int() extends scala.AnyVal {}
What is a value class?
Value class is a class whose instances are not represented as
objects by the underlying host system. All value classes inherit from
class AnyVal.
You can try your creating your own value class,
scala> case class ValString(str: String) extends AnyVal
defined class ValString

scala> val string: ValString = null
<console>:13: error: type mismatch;
 found   : Null(null)
 required: ValString
       val string: ValString = null
                               ^
value class needs to have some value or none. Thats why its recommended to use Option[ValString]
On the other hand, String is AnyRef. Actually AnyRef corresponds to java.lang.Object.
example,
scala> class RefString(str: String) extends AnyRef
defined class RefString

scala> val refString : RefString = null
refString: RefString = null

No comments:

Post a Comment