Directorio de artículos
1. Información general
En Scala, la clase de muestra es una clase especial, generalmente utilizada para guardar datos (similar a la clase POJO de Java), a menudo se usa en programación y marcos concurrentes como Spark y Flink.
2. Formato
case class 样例类名([var/val] 成员变量名1:类型1, 成员变量名2:类型2, 成员变量名3:类型3){
}
- El modificador de variable no se puede escribir, si no escribe, el modificador predeterminado es val
- Si desea darse cuenta de que el valor de una variable miembro se puede modificar, debe agregar manualmente var para modificar esta variable
3. Caso
demanda:
-
Defina la clase de muestra Person, que contiene dos variables miembro: nombre y edad.
其中: 姓名用val修饰, 年龄用var修饰
-
Cree un objeto de la clase Person en la clase de prueba e imprima sus valores de atributo.
-
Intente modificar los valores de las dos variables miembro, nombre y edad, y observe los resultados.
Código:
object demo {
//1. 创建一个Person样例类, 属性为: 姓名, 年龄.
case class Person(name:String = "张三",var age:Int = 23) {
}
def main(args: Array[String]): Unit = {
//2. 创建Person类型的对象, 然后打印属性值.
val p = new Person()
println(p)
//3. 尝试修改对象p的属性值
//p.name = "李四" //这样写会报错, 因为样例类的成员变量默认修饰符是: val
p.age = 24
println(p)
}
}
4. El método predeterminado en la clase de muestra
Cuando definimos una clase de muestra, el compilador nos ayudará automáticamente a generar algunos métodos, los que se usan comúnmente son los siguientes:
- aplicar () método
- método toString ()
- método equals ()
- método hashCode ()
- método copy ()
- método unapply ()
Función detallada:
-
aplicar () método
- Nos permite usar rápidamente el nombre de la clase para crear objetos, eliminando la nueva palabra clave.
- P.ej:
val p = Person()
-
método toString ()
- Nos permite imprimir el valor de cada atributo del objeto directamente al imprimir el objeto a través de la declaración de salida.
- P.ej:
println(p) 打印的是对象p的各个属性值, 而不是它的地址值
-
método equals ()
- Se puede utilizar directamente
==
para comparar si los valores de todas las variables miembro de los dos objetos de clase de muestra son iguales. - P.ej:
p1 == p2 比较的是两个对象的各个属性值是否相等, 而不是比较地址值
- Se puede utilizar directamente
-
método hashCode ()
- Se utiliza para obtener el valor hash de un objeto, es decir, el valor hash del mismo objeto debe ser el mismo y el valor hash de diferentes objetos es generalmente diferente.
-
P.ej:
val p1 = new Person("张三", 23) val p2 = new Person("张三", 23) println(p1.hashCode() == p2.hashCode()) //结果为: true
-
método copy ()
-
Puede usarse para crear rápidamente un objeto de instancia con el mismo valor de atributo, y también puede asignar un valor a una variable miembro especificada en forma de un parámetro con nombre.
-
P.ej:
val p1 = new Person("张三", 23) val p2 = p1.copy(age = 24) println(p1) //结果为: 张三, 23 println(p2) //结果为: 张三, 24
-
método unapply ()
- Se usa generalmente
提取器
, pero requiere algunos conocimientos previos, que aún no hemos aprendido, y se explicarán en detalle en capítulos posteriores.
- Se usa generalmente