What is the difference between:
class Pitch(var width: Int = 3, var height: Int = 5) {
constructor(capacity: Int): this()
}
and
class Pitch(var width: Int = 3, var height: Int = 5, capacity: Int)
What advantages does the constructor provide?
When you define your class like this:
class Pitch (var width: Int = 3, var height: Int = 5) {
constructor(capacity: Int): this() {}
}
you can create an instance of Pitch
using constructor without parameters, i.e.:
val p = Pitch()
// also you can invoke constructors like this
val p1 = Pitch(30) // invoked secondary constructor
val p2 = Pitch(30, 20) // invoked primary constructor
When you define your class like this:
class Pitch (var width: Int = 3, var height: Int = 5, capacity: Int) {
}
all parameters are required except those with default values. So in this case you can't use constructor with empty parameters, you need specify at least one parameter capacity
:
val p = Pitch(capacity = 40)
So in the first case you have an advantage of using constructor without parameters. In the second case if you want to call constructor and pass capacity
parameter you should name it explicitly when using constructor.