Какие преимущества дает конструктор?
В вашем первом фрагменте вы определяете два конструктора, один основной и один дополнительный. Эта особенность первичного конструктора заключается в том, что он всегда должен вызываться любым вторичным конструктором.
class Pitch (var width: Int = 3, var height: Int = 5) /* primary constructor */ {
// secondary constructor invokes primary constructor (with default values)
constructor(capacity: Int): this()
}
В обоих случаях: Pitch()
и Pitch(10, 20)
вызывается основной конструктор. Pitch (10) вызовет вторичный конструктор.
Если вы хотите вызвать первичный конструктор для этого экземпляра Pitch(10)
, вы должны явно указать имя параметра следующим образом:
Pitch(width = 30)
Вы также можете повернуть его и явно установить height
и оставить для width
значение по умолчанию:
Pitch(height = 30)
Как вы видите, используя два параметра (свойства) со значениями по умолчанию для каждого, у вас остается 4 возможности создать экземпляр класса только с помощью основного конструктора.
Указание вторичного конструктора особенно полезно для предоставления альтернативного способа создания экземпляра класса.
Используя это так
class Pitch(var width: Int = 3, var height: Int = 5, capacity: Int)
имеет смысл только тогда, когда вы не можете вывести значение capacity
из width
и height
. Итак, это зависит от вашего варианта использования.