Scala Value类

Scala Value类

Value类 是一种新的机制,有助于避免在运行时分配对象。 AnyVal 定义了值类。值类是预定义的,它们与类Java语言的原始类型相吻合。

有9种预定义的值类型。Double, Float, Long, Int, Short, Byte, Char, Unit, and Boolean.

equalshashCode 不能由一个值类重新定义。值类主要用于优化性能和内存。

让我们通过一些例子来理解值类。

例子 #1 :

// Scala program to illustrate value class
  
// Creating a value class and extend with AnyVal
case class C(val name: String) extends AnyVal
  
// Creating object
object gfg
{
    // Main method
    def main (args: Array[String])
    {
        // Creating the instance of the ValueClass
        val c = new C("GeeksForGeeks")
        c match 
        {   
            // new C instantiated here
            case C("GeeksForGeeks") => println("Matched with GeeksForGeeks")
            case C(x) => println("Not matched with GeeksForGeeks")
        }
    }
}

输出

Matched with GeeksForGeeks

在上面的代码中,在case类的帮助下定义了一个价值类,这里AnyVal定义了价值类(C)。价值类包括一个字符串参数。当我们传递与case语句相同的字符串时,将返回true,否则返回false。

例子 #2 :

// Scala program to illustrate value class
  
// Creating a value class and extend with AnyVal
class Vclass(val a: Int) extends AnyVal 
{
    // Defining method
    def square() = a*a
}
  
// Creating object
object gfg
{
    // Main method
    def main (args: Array[String])
    {
        // creating the instance of the ValueClass
        val v = new Vclass(5)
        println(v.square())
    }
}

输出

25

正如我们所看到的,在上面的例子中,创建了一个值类,并且表示为一个 int。 上面的代码由值类Vclass中的一个def组成。这里 Vclass 是一个用户定义的值类,它包裹了Int参数并封装了一个平方方法。为了调用平方方法,创建Vclass类的对象,如: val v = new Vclass(5)

Value类的一些限制 –

  • 一个值类可能没有专门的类型参数。 可能没有专门的类型参数。
  • 一个值类不能有嵌套或局部的类、特征或对象。
  • 一个值类不能重新定义 equals 或 hashCode。
  • 一个值类不能有 lazy vals, vars, 或 vals 作为成员。它只能有 defs 作为成员。
  • 任何其他类都不能扩展一个值类。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程