6.6. Creating Static Members with Companion Objects
Problem
You want to create a class that has instance methods and static
methods, but unlike Java, Scala does not have a static keyword.
Solution
Define nonstatic (instance) members in your class, and define members that you want to appear as “static” members in an object that has the same name as the class, and is in the same file as the class. This object is known as a companion object.
Using this approach lets you create what appear to be static members on a class (both fields and methods), as shown in this example:
// Pizza classclassPizza(varcrustType:String){overridedeftoString="Crust type is "+crustType}// companion objectobjectPizza{valCRUST_TYPE_THIN="thin"valCRUST_TYPE_THICK="thick"defgetFoo="Foo"}
With the Pizza class and
Pizza object defined in the same file
(presumably named Pizza.scala),
members of the Pizza object can be
accessed just as static members of a Java class:
println(Pizza.CRUST_TYPE_THIN)println(Pizza.getFoo)
You can also create a new Pizza
instance and use it as usual:
varp=newPizza(Pizza.CRUST_TYPE_THICK)println(p)
Note
If you’re coming to Scala from a language other than Java,
“static” methods in Java are methods that can be called directly on a
class, without requiring an instance of the class. For instance,
here’s an example of a method named increment in a Scala object named StringUtils:
object StringUtils {
def increment(s: String) = s.map(c => (c + 1).toChar)
}Because it’s ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access