책을 읽고 내용을 구현하는 것만 큼 명확하지 않습니다. 특정 상황에서 지식을 생각하고 적용해야합니다.
정말 어떻게 클래스의 변수를 초기화하고 바로 객체 생성 한 후이를 사용에 따라 달라집니다
일부 포인터 :
를 변수가 어떤 방법으로 사용하려는 경우 클래스 나 객체가 구조 바로 직후에 재사용 될 경우 (대부분의 경우), 불필요한 예외를 피하기 위해 필요한 값이 비어 있거나 null이 아닌지 확인해야합니다.
입력 매개 변수의 유효성을 검사하는 두 번째 시간은 올바른 값을 특정 내부 변수로 설정할 때입니다. 매개 변수를 특정 값 범위로 제한해야하는 경우 유효성을 검사하는 것이 중요합니다.
예 :
public Employee(int salary) {
if(salary >= this.salaryCap)
this.salary = salary;
}
int salary = 0;
int salaryCap = 1000;
창조하는 동안, 당신은 급여 금액에 전달 유효성을 검사 할 수 있습니다 :
우리가 객체의 샐러리 캡을 말해봐
클래스 관계는 또한 th의 유효성을 검사할지 여부를 결정합니다. e 값 또는 아닙니다. 예를 들어 상속 체인에서 매개 변수가 전달되면 유효성을 검사하는 데 시간이 걸릴 것입니다. 특히 상속 체인에있는 다른 개체의 상태에 영향을주는 경우 특히 그렇습니다.
예 :
나는 슈퍼 생성자를 호출하기 위해, 내가 입력 검증 유혹하고있을 때마다
:
public Employee(int salary) {
super(salary); //validate salary against known constraints
}
변수가에서 오는을?소스 (예 : sql 매개 변수 등)를 신뢰하지 않으면 추가 코드를 실행하기 전에 유효성을 검사하고 입력을 sanitize해야합니다. 이렇게하면 보안 공격을 예방할 수 있습니다.
생성자에서 유효성 검사와 매개 변수 검사를 수행하는 데 항상 지쳐 있습니다. 나는 getters와 setter가 입력을 검증하는 것을 선호한다. 그렇게하면, 객체 생성시에 어떤 일이 발생한다면, 적어도 상태가 쉽게 결정될 수없는 완전한 일관성없는 객체보다 반 작업 객체의 보장이 있습니다. 물론 이것은 컨텍스트에 따라 다르며 제약 조건이 엄격하면 객체 생성을 중지하고 클라이언트 (사용자, 호출 객체 등)에게 유효한 입력 매개 변수를 묻는 메시지를 표시 할 수 있습니다.
게터/세터를 사용하면, 저 오브젝트가 실제로 오브젝트가 제공하는 외부 인터페이스를 호출하여 단계별로 구성되어 있다는 것이다 예외가 발생 작성 중에 검증을 구속 이외 수득 장점, 객체를 사용할 수 없거나 불안정하게 만듭니다. 그래서 그 대신이의
:
public Employee(int salary) {
if(salary >= this.salaryCap)
this.salary = salary;
}
나는이 선호 :
public class Employee {
public void setSalary(int salary) {
if(salary >= this.salaryCap)
this.salary = salary;
}
}
후자는 나에게 능력을 제공을하는 완전히 객체 생성에 영향을 미치지 않습니다 호출자에게 유효한 예외로 종료 (나는 생성자에서 예외를 던지는 것을 좋아하지 않는다).
간단히 말해, 변수에 제약 조건이 있습니까? 그렇다면 내부 데이터 속성으로 설정하기 전에 해당 제약 조건의 유효성을 검사하십시오.
저자가 생성자의 매개 변수를 확인하기 위해 언급 한 내용을 어디서 읽었습니까? – Kwadz