Scala Value class vs Ref class
Int
(including Float
, Double
, Char
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