почему публичный конструктор должен быть предоставлен в классе javabean - PullRequest
4 голосов
/ 22 февраля 2012

Я слышал правила JavaBean, в которых первое и главное правило таково, что для каждого класса JavaBean явно программист должен предоставить открытый конструктор по умолчанию.Кто-нибудь может объяснить, почему мы должны предоставить конструктор по умолчанию для JavaBean

ОБНОВЛЕНИЕ:

Пожалуйста, объясните ясно, почему jvm не будет предоставлять конструктор по умолчанию для JavaBeans и как jvmреагирует на предоставление конструктора по умолчанию

Ответы [ 5 ]

13 голосов
/ 22 февраля 2012

Я слышал правила JavaBean, в которых первое и главное правило таково, что для каждого класса JavaBean явно программист должен предоставить общедоступный конструктор по умолчанию.Кто-нибудь может объяснить, почему мы должны предоставить конструктор по умолчанию для JavaBean

Экземпляры JavaBean создаются путем рефлексивных вызовов конструктора no-arg.Так что должен быть такой конструктор.

Пожалуйста, объясните ясно, почему jvm не предоставляет конструктор по умолчанию для JavaBeans и как jvm реагирует на предоставление конструктора по умолчанию

jvm будет предоставлять конструктор по умолчанию для JavaBean, если вы явно не указали конструкторов.Если вы do предоставляете конструктор, вы должны предоставить конструктор без аргументов, кроме того, который вы определяете с помощью параметров.

1 голос
/ 22 февраля 2012

Мы могли бы добавить некоторые другие конструкторы к нашему bean-компоненту, которые принимают параметры, и если бы мы не включили конструктор Default в наш класс, другой конструктор затенял бы его, таким образом делая его больше недопустимым bean-компонентом.

0 голосов
/ 22 февраля 2012

Я подозреваю, что это неправильное понимание разницы между синтаксисом и сгенерированным классом.

public class Alpha {
}

public class Beta {
  public Beta() {}
}

В Alpha конструктор по умолчанию неявный; в Beta это явно. Оба имеют общедоступные конструкторы по умолчанию согласно спецификации JavaBean.

public class Gamma {
  private final Type t;
  public Gamma(Type t) {
    this.t = t;
  }
}

С другой стороны, Gamma не соответствует требованию, так как нет общедоступного конструктора без аргументов. Не было бы способа создать экземпляр этого объекта без контекста о том, как заполнить конструктор.

0 голосов
/ 22 февраля 2012

Это то, что говорит Википедия Статья Википедии о Java Bean

Класс должен иметь открытый конструктор по умолчанию (без аргументов).Это позволяет легко создавать экземпляры в рамках редактирования и активации.

На самом деле есть смысл создать экземпляр класса путем интроспекции, если он получит конструктор по умолчанию

 getClass().getClassLoader().loadClass("mypackage.myclass").newInstance();
0 голосов
/ 22 февраля 2012

По моему опыту, это предотвращает ситуацию, когда кто-то добавляет конструктор с параметрами и, таким образом, эффективно удаляет конструктор по умолчанию. При явной реализации конструктора по умолчанию это вряд ли произойдет.

...