Я знаю, как создать immutable class
. Я создал следующее.Неизменяемый класс
public class Employee {
private final int id;
private final String name;
private final int salary;
public Employee(int id, String name, int salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getSalary() {
return salary;
}
}
Несколько статей также предполагает, что вы объявляете свой класс как final
, даже Эффективная JAVA книга говорит «пометить методы, как окончательный, так что они не могут быть overriddden». Но я не могу понять, почему мне нужно использовать final
по классу или по методам setter
, когда поля объявлены private
, а также final
?
Или изделия и ЭФФЕКТИВНЫЕ JAVA, предлагающие альтернативный подход !!!
Можете ли вы привести пример кода, в котором вы можете переопределить частный метод? частные члены не наследуются, и я не думаю, что переопределение возможно. Пожалуйста, поделитесь примером кода. – HakunaMatata
К сожалению, классы, объявленные окончательными, иногда сложнее для модульного теста. Не все модульные тестовые среды могут эффективно высмеивать окончательный класс, а переопределяющие методы, которые затрудняют ваш тест, также практически невозможны. final особенно раздражает старый код, который не тестируется junit ... – extraneon