Подтвердить что ты не робот

Сущность Java - зачем мне нужен пустой конструктор?

Это может показаться вам глупым, но почему мне нужно определить пустой конструктор в моей @Entity s?

В каждом уроке, который я видел, каждый объект нуждается в пустом конструкторе.

Но Java всегда дает вам невидимый пустой конструктор по умолчанию (если вы не переопределите его).

Спасибо.

ИЗМЕНИТЬ

Я думаю, что есть семантическая проблема. То, что я понял под "необходимостью", было написано.

Значение: всегда записывайте пустой конструктор в свой объект.

Пример:

@Entity
public class MyEntity implements Serializable {

   @Id
   private String str;

   public MyEntity(){}

   //here getter and setter
}

Но Java всегда дает вам этот пустой конструктор, когда вы не переопределяете его (напишите другой с параметрами).

В этом случае запись этого пустого конструктора кажется бесполезным.

4b9b3361

Ответ 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 должен иметь следующие свойства:

  • Getters и seters для всех его основных переменных экземпляра.

  • пустой конструктор

  • Все его переменные экземпляра должны быть private.

Таким образом, утверждение: "каждому объекту нужен пустой конструктор".