Home »
Scala
Case Class in Scala: How to Create a Case Object?
By IncludeHelp Last updated : November 07, 2024
Case Class - Definition
The case class is a special type of class in Scala. It is similar to regular class and has some added features that are helpful in modeling immutable data and pattern matching. The case class uses the apply () method to deal with the construction of new objects. The case class in Scala is immutable and so are all of its members, i.e., you cannot change the value of them.
Creating a Case Class
The creation of case class is simple, the keyword case class is used to define it followed by its name and a set of parameters that can be empty.
Syntax
case class cc_Name (paramter(s))
Code snippet to create a case class in Scala
case class student(name: String, class: Int, marks: Int, result: String)
Case Objects
The case objects are nothing but the instances of case class in Scala.
Syntax
Creating case objects
obj_name = cc_name(parameter_values)
Could you see and understood, there is no new keyword used in the definition of case object which is because it uses the apply() method.
Program to illustrate the creation of case objects
// Program to illustrate the creation of case objects in Scala
// Creating a Case Class
case class student(name: String, standard: Int, marks: Int, result: String )
object myObject {
def main(args: Array[String]) {
// Creating a case Object
val student1 = student("Prem", 10, 89, "A+")
println("Case Object: " + student1)
}
}
Output:
Case Object: student(Prem,10,89,A+)
Comparing Case Objects
In Scala, case objects can be compared using == expression which returns true or false based on the comparison.
Syntax
case_Obj1 == case_Obj2
Program to illustrate the comparison of case objects
// Program to illustrate the comparison of case objects in Scala
// Creating a Case Class
case class student(name: String, standard: Int, marks: Int, result: String )
object myObject {
def main(args: Array[String]) {
// Creating a case Object
val student1 = student("Prem", 10, 89, "A+")
println("Case Object student1 : " + student1)
val student2 = student("Ramesh", 11, 56, "B")
println("Case Object student2 : " + student2)
val student3 = student("Prem", 10, 89, "A+")
println("Case Object student3 : " + student3)
val comp1 = student1 == student2
println("Comparison of student1 and student2 = " + comp1)
val comp2 = student1 == student3
println("Comparison of student1 and student3 = " + comp2)
}
}
Output:
Case Object student1 : student(Prem,10,89,A+)
Case Object student2 : student(Ramesh,11,56,B)
Case Object student3 : student(Prem,10,89,A+)
Comparison of student1 and student2 = false
Comparison of student1 and student3 = true
Coping Case Class
We can copy the contents of one case object to another fully and partially too.
Copying case object using copy() method [shallow copy]:
The copy() method on the case object is used to copy the contents of one object to another. This is a shallow copy.
Syntax
caseObj1 = caseObj2.copy()
Program to illustrate object copy using copy() method
// Creating a Case Class
case class student(name: String, standard: Int, marks: Int, result: String )
object myObject {
def main(args: Array[String]) {
// Creating a case Object
val student1 = student("Prem", 10, 89, "A+")
println("Case Object student1 : " + student1)
val copyObj = student1.copy()
println("Copied Object: " + copyObj)
}
}
Output:
Case Object student1 : student(Prem,10,89,A+)
Copied Object: student(Prem,10,89,A+)
Copying some constructor arguments from an object
The copy() method can also be used to create a copy object and copy only some parameters from the list.
Syntax
copy_CaseObject = caseObj.copy(parameters)
Example
// Creating a Case Class
case class student(name: String, standard: Int, marks: Int, result: String )
object myObject {
def main(args: Array[String]) {
// Creating a case Object
val student1 = student("Prem", 10, 89, "A+")
println("Case Object student1 : " + student1)
val copyObj = student1.copy(name = "Ria", student1.standard, marks = 85, student1.result)
println("Copied Object: " + copyObj)
}
}
Output:
Case Object student1 : student(Prem,10,89,A+)
Copied Object: student(Ria,10,85,A+)