Правила класса JavaBean - PullRequest
5 голосов
/ 09 мая 2011

Каковы правильные правила написания класса JavaBean?

Я запутался, потому что некоторые книги ДОЛЖНЫ использовать, а другой пользователь ДОЛЖЕН или МОЖЕТ описать правило написания:

т.е.*

  • класс бобов ДОЛЖЕН реализовывать Serializable или ДОЛЖЕН?
  • переменные экземпляра ДОЛЖНЫ быть частными или ДОЛЖНЫ БЫТЬ?

Ответы [ 5 ]

7 голосов
/ 09 мая 2011

JavaBean определяется его свойствами (т.е. его методами получения и установки), а не его полями . Хотя термины используются взаимозаменяемо, это на самом деле не правильно. Механизм Introspector полностью игнорирует поля.

Пример

Возьми это (ужасно разработанный) Джавабин:

public class TestBean {
    private int baz;
    private char[] phleem;

    public String getFoo() {
        return new String(phleem);
    }
    public void setFoo(final String foo) {
        this.phleem = foo.toCharArray();
    }
    public long getBar() {
        return baz;
    }
    public void setBar(final long bar) {
        this.baz = (int) bar;
    }
}

Вы могли бы подумать, что свойства:

  • "Баз" (int)
  • "Phleem" (char[])

но теперь давайте проверим это с помощью интроспектора Javabeans:

for (PropertyDescriptor descriptor : Introspector
        .getBeanInfo(TestBean.class, Object.class)
        .getPropertyDescriptors()) {
    System.out.println("Name: " + descriptor.getName() + 
                     ", type: " + descriptor.getPropertyType());
}

Вот вывод:

Name: bar, type: long
Name: foo, type: class java.lang.String

Вывод:

Геттеры и сеттеры - это то, что определяет свойство Javabeans. Это соглашение , что они поддерживаются полями с одинаковыми именами и типами, но поля на самом деле не являются частью свойств Javabean (хотя во многих документах предлагается иное).


Перечитав мой ответ: он подразумевается как дополнение к другим ответам. Если вы хотите краткий и простой ответ, используйте Скаффман.

2 голосов
/ 01 апреля 2012
  • Это публичный класс.

  • Имеет открытый конструктор без параметров (хотя может иметь и другие конструкторы а также)

  • Он реализует интерфейс Serializable (то есть он может быть сделан постоянным, поэтому его состояние может быть спасенным)

  • У него есть свойства с методами «getter» и «setter», названные следующим Шаблоны именования JavaBeans

  • У него есть события, которые соответствуют стандартной модели событий Java с регистрацией методы, названные в соответствии с шаблонами именования JavaBeans

  • Возможно, есть другие методы, которые не соответствуют шаблонам именования. Эти методы не предоставляются инструментом построения.

1 голос
/ 24 сентября 2018

Java Bean - это класс Java, который должен следовать следующим соглашениям:

  • Он должен иметь конструктор без аргументов.
  • Это должно быть Serializable.
  • Он должен содержать методы для установки и получения значений свойств, известные как getter и setter методы.
1 голос
/ 09 мая 2011

Добавление к предыдущему постеру - Скаффман .Всегда полезно переопределить toString(), hashCode(), equals() и, наконец, написать перегруженный конструктор, который имеет все поля (которые есть у этого класса) в качестве входных данных.

Не забудьтеиспользуйте другие ссылки (например, List, HashMaps и т. д.) в реализации toString() и hashCode().

Кроме того, eclipse имеет встроенную функциональность для их генерации для вас ..

0 голосов
/ 09 августа 2016

Все вышеперечисленное и оно не должно пересекать границы Java API. Это означает, что он не должен расширять или реализовывать какие-либо классы или интерфейс, но есть одно ослабление, он может реализовать только один сериализуемый интерфейс почему, потому что это маркерный интерфейс

...