官术网_书友最值得收藏!

  • Learning Scala Programming
  • Vikash Sharma
  • 234字
  • 2021-06-30 19:07:51

AnyVal

The latter, AnyVal, represents values not implemented as objects in the underlying runtime system. Scala has some predefined numeric and non-numeric value classes as shown in the class hierarchy.

It's possible to define user-defined value types as well, with some conditions applied. Remember I asked you to take a closer look at the source of the Int.scala file? You may have noticed that there are no val  or var declarations in the class Int that extends AnyVal. This is one of the constraints of defining a subtype of AnyVal. One of the reasons you might consider defining an AnyVal type is to avoid object instantiation at runtime. Some of the constraints are:

  • It must have a single val parameter that is the underlying representation. It means that if you declare class Num(val underlying: Int) extends AnyVal, then the compile time representation of it will be of type Num, but at runtime it'll be converted to Int, and methods defined within will be used as statics.
  • It must define only def, no val, var, nested classes, traits, or objects.
  • It can only extend universal traits, traits that extend only the super type Any.
  • It can't be used for pattern-matching, or type tests.

Scala's implementation of AnyVal includes nine implementations. Out of them, Byte, Short, Int, Long, Char, Float, and Double are numeric value types, while Boolean and Unit are non-numeric types.

主站蜘蛛池模板: 九龙坡区| 平塘县| 温州市| 甘肃省| 阳城县| 玉门市| 乳源| 迭部县| 申扎县| 渑池县| 安阳市| 灵山县| 栖霞市| 徐水县| 马关县| 邛崃市| 鸡泽县| 灌阳县| 启东市| 遵义市| 麻阳| 金溪县| 镇安县| 石台县| 灵宝市| 汤阴县| 开阳县| 阳原县| 满洲里市| 连云港市| 隆子县| 天峻县| 广西| 新竹县| 云霄县| 房产| 巴彦县| 南昌县| 鄄城县| 白山市| 融水|