2011-07-11 5 views
1

おはよう!Javaコンストラクタ

私は次のようにコンストラクタをオーバーロード作成:

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; 
} 

私は自動インクリメントにIDをしたいので、私は、この変数を使用:

private static int count; 
    private int id; 

私はContactsBean() contacts = new ContactsBean()をインスタンス化するとき私の問題は、あります、 idの値は2 ... 2,4,6,8 ...などとなります。

なぜですか? ID増分の自動番号を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); 
} 
+4

は短いが完全なプログラムをご提示くださいwhic hは問題を示します。 –

+2

呼び出しコードに何か問題があるはずです。同じ変数を2回以上初期化する必要があります。 –

+0

他のコンストラクターが呼び出されないため、オーバーロードはここでは問題になりません。問題はこのスニペットの外で、おそらくこのBeanをインスタンス化するコード内にあります。任意のフレームワークを使用していますか、それとも普通のJavaですか? –

答えて

5

まず、DRY(自分を繰り返さないでください)、より良いでしょう:このコンストラクタをしようと、ある

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

第二に、あなたのコード内の2つによって何ら増分はありません。テストコードを貼り付けてください。

2

ContactsBean() contacts = new ContactsBean();からの括弧の最初のセットを削除してください。

ContactsBean contacts = new ContactsBean(); 
+0

これは、コンパイル時エラー(元のコードの一部であった場合)を削除しています。 –

0
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; 
} 
+0

初心者は* that *コンストラクタを呼び出していません... –

+0

@Andreas_D Fixed。ありがとう:) –

2

他のクラスでContactsBeanの2つのオブジェクトを作成していると思われるかもしれません。コードをチェックする必要があります。

2

両方のコンストラクタでブレークポイントを設定するコードをデバッグしようとしましたか?

Engの提案Fouadは良いヒントですが、あなたの問題を解決するつもりはありません。

はまた

(問題はしかし、それとは何の関係もありません。その場合は、あなたのカウンターは、それが必要よりも低い値を持っているでしょう)あなたのカウンターは、スレッドセーフではないことに注意してくださいそして、あなたが本当にする必要がある場合実際に作成するオブジェクトの数を把握しておくと、これを行う最善の方法はJava Beanの静的属性であるとは思わない...

2

コピーコンストラクタが引数なしを呼び出している可能性がありますあなたのコンストラクターのバージョン。 (または私はC++病気に苦しんでいます?)

2

私の提案は、コンストラクタでcontactIDをインクリメントしてみたが、いずれかのIDだけインクリメントされ、新しく作成されたデータベースオブジェクトからそれを取得しないことであろうあなたがcontactsDAO.getContactsList()。size()+ 1の次のIDを基にコンタクトのリストを取得しているからです。以下のような何かに

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(); 
} 

は、この数は、のために正確ではないかもしれませんID。

select MAX(ID) from contacts 

これは、使用される最大のID番号を返します。

0

私は私のコードは、私はそれを変更

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

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

の前にある

.... Struts2のは、それをインスタンス化するので、不要アクションクラスに自動的にオブジェクト(豆)のインスタンスを生成することを学びました...

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

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

そして、それは動作します...

関連する問題