Как создать класс как неизменяемый в Java, который имеет много полей? - PullRequest
1 голос
/ 14 июня 2019

У меня есть вопрос для интервью, на котором интервьюер спросил меня: «Как вы создадите неизменяемый класс в Java, в каком классе будет более 100 полей?»

Как мы знаем, для создания неизменяемого классанам нужно объявить класс как final, нам нужно объявить все поля как final, и в этом классе не должно быть никакого метода setter.Нам нужно инициализировать эти поля в конструкторе.

Но что произойдет, когда у нас будет более 10 или более полей?Мы не можем передать все поля в конструкторе, верно?В этом случае, как мы можем создать неизменный класс?

1 Ответ

2 голосов
/ 14 июня 2019

Количество полей здесь не имеет значения, даже если наличие нескольких полей в одном классе является ужасным замыслом и является признаком того, что класс должен быть реорганизован. Чтобы сделать класс неизменным, вам необходимо:

  1. Нет методов установки. это означает, что вы либо хотите Builder внутренний класс, который устанавливает значения ваших полей перед вызовом конструктора, либо просто включаете все поля в качестве параметров конструктора (настоятельно рекомендуется).
  2. Объявите класс как final. Это предотвращает расширение классов и вызов super.
  3. Если у вас есть не примитивные поля внутри вашего неизменяемого класса, вам нужно будет копировать их и возвращать копию каждый раз, когда вы вносите в них изменения.

Кстати, насколько я знаю, конструкторы Java могут обрабатывать 255 параметров . Так что для этого интервью параметры конструктора будут опцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...