2016-05-05 9 views
0

私は "EmployeeModel"という名前のBeanを持っています。従業員を削除(削除)する方法もある別のクラス "EmployeeManager"もあります。Java Beanプリミティブまたはラッパー

マイEmployeeModel:EmployeeManagerクラスで

package at.fh.swenga.employee.model; 

import java.util.Date; 

import javax.validation.constraints.Min; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Past; 

import org.springframework.format.annotation.DateTimeFormat; 

public class EmployeeModel implements Comparable<EmployeeModel> { 

    @Min(1) 
    private int ssn; 

    private String firstName; 
    private String lastName; 

    private int salary; 


    @NotNull(message = "{0} is required") 
    @DateTimeFormat(pattern = "dd.MM.yyyy") 
    @Past(message = "{0} must be in the past") 
    private Date dayOfBirth; 

    public EmployeeModel() { 
    } 


    public EmployeeModel(int ssn, String firstName, String lastName, Integer salary, 
      Date dayOfBirth) { 
     super(); 
     this.ssn = ssn; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.salary = salary; 
     this.dayOfBirth = dayOfBirth; 
    } 

    public int getSsn() { 
     return ssn; 
    } 

    public void setSsn(int ssn) { 
     this.ssn = ssn; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public int getSalary() { 
     return salary; 
    } 

    public void setSalary(int salary) { 
     this.salary = salary; 
    } 

    public Date getDayOfBirth() { 
     return dayOfBirth; 
    } 

    public void setDayOfBirth(Date dayOfBirth) { 
     this.dayOfBirth = dayOfBirth; 
    } 

    @Override 
    public int compareTo(EmployeeModel o) { 
     return ssn - o.getSsn(); 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ssn; 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     EmployeeModel other = (EmployeeModel) obj; 
     if (ssn != other.ssn) 
      return false; 
     return true; 
    } 
} 

私の方法:あなたが方法を見ることができるように

public boolean remove(int ssn) { 
    return employees.remove(new EmployeeModel(ssn, null, null,null, null)); 
} 

唯一のタイプ "int型" であるSSNをとります。 問題は、私のコンストラクタが給料をintとして受け取ったときに、私はメソッドでそれを提供する必要がありますが、私はこれを避けたいと思います。あなたが見ることができるように私のコンストラクタは、給与フィールドでラッパー整数を持っていますが、私は私のアプリケーションを開始し、従業員を削除しようとするたびに、私はNullPointerExceptionsを得ていますか?

私の質問は、なぜ私がそれらを手に入れているのか、私はインスタンス化時に "private Integer salary;"というラッパークラスを使うべきかどうかです。プリミティブな方法を使うのではなく?

答えて

0

1)を呼び出すときには、検証エラーを取得する必要があります。

new EmployeeModel(ssn, null, null,null, null) 

最後のパラメータは、あなたが@NotNull妥当性チェックを持ってdayOfBirth、です。

2)nullのパラメータでこのようなコンストラクタを呼び出すと、オブジェクトを構築するために必要なパラメータ(必要なパラメータのみを指定する必要があります)を指定するか、オブジェクトを適切にインスタンス化するのに十分な有効なデータがあります。 dateOfBirthがnullでない場合は、nullをコンストラクタに渡すべきではありません。

のようなたぶん、あなたは、デフォルトコンストラクタEmployeeModel()を削除し、最小限のパラメータを期待したものと交換してください必要があります:あなたはこのような問題を克服するために「偽」データに試みるべきではありません

public EmployeeModel(int ssn, Date dayOfBirth) 

。あなたのコードを見れば、EmployeeModelを作成するためにSSNだけが存在しなければならないので、dayOfBirthから@NotNullを削除し、ssnだけを受け入れる単一引数のコンストラクタを提供する必要があります。それはあなたの問題を解決するはずです。計算を試みる前に、あなたが給料のような計算をどこで行っても、防御的なヌルチェックを行うことを保証したいと思うでしょう。

+0

私の質問は私のdayOfBirthに関するものではなく、これはうまくいきます。私の質問をもう一度読んでみてください。はい、ssnは従業員を削除するために必要な唯一の属性であり、私はメソッドを使用するために属性給与を渡したくありませんでした – Bajro

+0

私はdayOfBirthにコメントしましたが、あなたの質問に集中しました。答えをもう一度読んで理解してください。 – pczeus

+0

それに加えて、「従業員」がどのように構築され、使用されているかを示す関連コードを追加しませんでした。したがって、それ以上の情報は「推測」だけになります。最小限の、完全で有効な質問を作成するための情報については、http://stackoverflow.com/help/mcveをお読みください。 – pczeus

関連する問題