Простейшее упражнение из книги Кей Хорстмана "Scala для нетерпеливого" меня озадачивает. Это о конструкторах primary
, auxiliary
и default primary
:
ex 5.10:Рассмотрим класс
class Employee(val name: String, var salary: Double) {
def this() { this("John Q. Public", 0.0) }
}
Перепишите его для использования явных полей и основного конструктора по умолчанию.
Я не уверен, что я должен это делать. Может ли кто-нибудь из вас предложить решение?
Однако попытка решить это упражнение, возможно, заставило меня узнать о чем-то, чего я раньше не замечал об основных конструкторах и val
(как вы можете видеть, я не совсем уверен):
Правильно ли, если я скажу, что поле val
(как name
в классе Employee
выше) может быть инициализировано только с помощью конструктора primary
, а не с помощью auxiliary
one? В последнем случае компилятор будет рассматривать как переназначение в поле val
, вызывающее ошибку.
Сначала я думал, что поля val
являются грубым эквивалентом конечным полям java, ожидающим, что было бы законно назначать их в первый раз в любом конструкторе, но, похоже, я ошибался.
Я не совсем доволен тем, что может быть только диким догадком, поэтому я был бы признателен, если бы кто-то мог дать мне более точную информацию об этом.