Конструктор Java - PullRequest
       1

Конструктор Java

1 голос
/ 11 июля 2011

Добрый день!

Я создал конструкторы перегрузки следующим образом:

public ContactsBean(String firstName, String lastName,
                String telNumber, String email) {
    this.id = count;
    count = count + 1;
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.telNumber = telNumber;
}

public ContactsBean() {
    this.id = count;
    count = count + 1;
}

Я хочу автоматически увеличить идентификатор, чтобы я использовал следующие переменные:

    private static int count;   
    private int id;

Моя проблема в том, что когда я создаю экземпляр ContactsBean() contacts = new ContactsBean(), значение id увеличивается на 2 .. 2,4,6,8 ... и т. Д.

Почему? Как я могу сделать автоматическое увеличение номера идентификатора на 1?

Спасибо.

EDIT:

Действие:

private ContactsBean contacts = new ContactsBean();
private ContactsManager contactsManager = new ContactsManager();

    public String add() {
        contactsManager.addContacts(contacts);
        return SUCCESS;
    }

менеджер:

private ContactsDAO contactsDAO = ContactsDAO.getInstance();
private List<ContactsBean> contactsList = contactsDAO.getContactsList(); 

public void addContacts(ContactsBean contact) {
    contactsList.add(contact);
}

Ответы [ 8 ]

5 голосов
/ 11 июля 2011

Во-первых, СУХОЙ (не повторяйтесь), было бы лучше:

    public ContactsBean(String firstName, String lastName,
                String telNumber, String email){
    this();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.telNumber = telNumber;
}

Во-вторых, в вашем коде нет приращения на два.Пожалуйста, вставьте ваш тестовый код.

2 голосов
/ 04 августа 2011

Мое предложение будет заключаться в том, чтобы не пытаться увеличивать contactID в конструкторе, а либо получать его из вновь созданного объекта базы данных, где ID увеличивается с помощью базы данных через спецификацию идентификации, либо поскольку вы получаете список базы контактов ваш следующий идентификатор из контактов DAO.getContactsList (). size () + 1.

Я бы также порекомендовал изменить с:

private ContactsDAO contactsDAO = ContactsDAO.getInstance();
private List<ContactsBean> contactsList = contactsDAO.getContactsList(); 

public void addContacts(ContactsBean contact) {
    contactsList.add(contact);
}

На что-то вроде:

private ContactsDAO contactsDAO = ContactsDAO.getInstance();
private List<ContactsBean> contactsList; 

public void addContacts(ContactsBean contact) {
    int id = getContactList().size()+1;
    contact.setId(id);
    contactsList.add(contact);
}

public List<ContactsBean> getContactList(){
     return contactsDAO.getContactsList();
}

в качестве альтернативы, если вы можете удалить контакты из базы данных, этот номер может быть неточным для идентификатора. Вы можете создать запрос на основе таких как:

select MAX(ID) from contacts

Это вернет самый большой использованный номер идентификатора.

2 голосов
/ 11 июля 2011

Это может быть связано с тем, что конструктор копирования вызывает версию con-конструктора без аргументов.

(или я страдаю от болезни C ++?)

2 голосов
/ 11 июля 2011

Вы пытались отладить свой код, устанавливая точку останова для обоих конструкторов?

Предложение англ. Фуад хороший совет, но он не решит твою проблему.

Также обратите внимание, что ваш счетчик не является потокобезопасным (однако проблема не имеет к нему никакого отношения. В этом случае ваш счетчик будет иметь более низкое значение, чем должно быть)

И если вам действительно нужно отслеживать, сколько объектов вы на самом деле создаете, я не думаю, что лучший способ сделать это - использовать статический атрибут в Java Bean ...

2 голосов
/ 11 июля 2011

Я думаю, что вы создаете два объекта ContactsBean в других ваших классах, возможно, вы не знаете об этом.Вы должны проверить код.

2 голосов
/ 11 июля 2011

Попробуйте удалить первый набор скобок из ContactsBean() contacts = new ContactsBean();.То есть попробуйте этот конструктор:

ContactsBean contacts = new ContactsBean();
0 голосов
/ 04 августа 2011

Я узнал, что Struts2 автоматически генерирует экземпляр объекта (бинов) в классах действий, поэтому нет необходимости создавать его экземпляры ....

Мой код раньше

private ContactsBean contacts = new ContactsBean();
private ContactsManager contactsManager = new ContactsManager();

    public String add() {
        contactsManager.addContacts(contacts);
        return SUCCESS;
    }
    //getters and setters

Я изменил его на ..

private ContactsBean contacts;
private ContactsManager contactsManager = new ContactsManager();

    public String add() {
        contactsManager.addContacts(contacts);
        return SUCCESS;
    }
//getters and setters

И это работает ...

0 голосов
/ 11 июля 2011
private static int count = 0;
private int id;
// ...
public ContactsBean(String firstName, String lastName,String telNumber, String email)
{
    this();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.telNumber = telNumber;
}
public ContactsBean()
{
    id = ++count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...