Сущность Java - зачем мне нужен пустой конструктор?
Это может показаться вам глупым,
но почему мне нужно определить пустой конструктор в моей @Entity
s?
В каждом уроке, который я видел, каждый объект нуждается в пустом конструкторе.
Но Java всегда дает вам невидимый пустой конструктор по умолчанию (если вы не переопределите его).
Спасибо.
ИЗМЕНИТЬ
Я думаю, что есть семантическая проблема.
То, что я понял под "необходимостью", было написано.
Значение: всегда записывайте пустой конструктор в свой объект.
Пример:
@Entity
public class MyEntity implements Serializable {
@Id
private String str;
public MyEntity(){}
//here getter and setter
}
Но Java всегда дает вам этот пустой конструктор, когда вы не переопределяете его (напишите другой с параметрами).
В этом случае запись этого пустого конструктора кажется бесполезным.
Ответы
Ответ 1
Для создания нового экземпляра посредством отражения в вашей структуре персистенции необходим пустой конструктор. Если вы не предоставляете какие-либо дополнительные конструкторы с аргументами для класса, вам не нужно указывать пустой конструктор, потому что вы получаете один по умолчанию.
Вы также можете использовать аннотацию @PersistenceConstructor, которая выглядит следующим образом
@PersistenceConstructor
public Movie(Long id) {
this.id = id;
}
чтобы инициализировать вашу сущность, если Spring Данные присутствуют в вашем проекте. Таким образом, вы можете избежать и пустого конструктора.
Ответ 2
Но java всегда дает вам невидимый пустой конструктор по умолчанию (если вы не переопределяйте один).
Эта инструкция верна только в том случае, если вы не предоставляете какой-либо конструктор в своем классе. Если конструктор аргументов предоставляется в вашем классе, тогда jvm не добавит конструктор без аргументов.
Ответ 3
Явное определение конструктора по умолчанию не требуется, если вы не предоставили другой конструктор для объекта. Если вы предоставите другой конструктор, кроме одного с сигнатурой конструктора по умолчанию, конструктор по умолчанию не будет создан.
Поскольку реализации JPA полагаются на существование конструктора по умолчанию, тогда необходимо включить конструктор по умолчанию, который будет опущен.
Ответ 4
Как вы указали тег "JPA", я предполагаю, что ваш вопрос относится только к JPA, а не к пустым конструкторам вообще.
Фреймы с персистентностью часто используют рефлексию, а более конкретно Class<T>.newInstance()
- для создания экземпляров ваших объектов, а затем вызывайте getters/seters путем интроспекции для установки полей.
Вот почему вам нужен пустой конструктор и getters/seters.
Смотрите fooobar.com/questions/88353/...
Ответ 5
На самом деле вам не нужно писать. У вас есть это по умолчанию. Иногда вы можете создать конструктор private
, чтобы пользователи не использовали по умолчанию
public class MyClass{
private MyClass(){}
}
Для шаблонов singelton, например, вы можете блокировать использование конструктора по умолчанию.
Иногда, когда вы используете плагин Gson
для преобразования данных String Json в Object, он требует записи конструктора по умолчанию, иначе он не работает
Ответ 6
Java не всегда дает вам невидимый пустой конструктор по умолчанию, если ваш класс получил конструктор аргументов, вам нужно определить пустой конструктор самостоятельно.
Ответ 7
Из тега JPA, я полагаю, вы работаете с Java beans. Каждый bean должен иметь следующие свойства:
Таким образом, утверждение: "каждому объекту нужен пустой конструктор".