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 class
class
Pizza
(
var
crustType
:
String
)
{
override
def
toString
=
"Crust type is "
+
crustType
}
// companion object
object
Pizza
{
val
CRUST_TYPE_THIN
=
"thin"
val
CRUST_TYPE_THICK
=
"thick"
def
getFoo
=
"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:
var
p
=
new
Pizza
(
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 ...
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.