sayName()
이 같은 클래스에 있기 때문에 대부분이 예제에서 변수를 직접 사용할 수 있습니다. 그것은 개인 값 (상태)를 유지하고 다른 클래스와의 상호 작용에 대한 공공 방법을 제공하는 객체 지향 프로그래밍의 원리이다
1) : 그 외에는
, 나는 getter 및 setter를 가진 3 가지 이유를 참조하십시오.
2. getters 및 setter를 사용하는 클래스는 종종 Java bean 디자인 패턴을 따릅니다. 이 패턴을 사용하면 JSP 또는 Spring과 같은 템플릿 엔진이나 표현식 언어에서 이러한 객체를 사용할 수 있습니다.
3) 경우에 따라 실제 오류를 방지합니다. 예 : 게터 만 값이 아닌 참조하여 운영 세터와 날짜 변수를 포장
public class DateHolder() {
public Date date;
public static void main(String... args) {
DateHolder holder = new DateHolder();
holder.date = new Date();
System.out.println("date in holder: "+holder.date);
Date outsideDateRef = holder.date;
outsideDateRef.setTime(1l);
//will be different, although we did not change anything in the holder object.
System.out.println("date in holder: "+holder.date);
}
}
은이를 방지 할 수 :
우리는 변수에 직접 액세스를 방지 할
public class DateHolder() {
private Date date;
public Date getDate() {
return (Date)this.date.clone();
}
public void setDate(Date date) {
this.date = (Date) date.clone();
}
public static void main(String... args) {
DateHolder holder = new DateHolder();
holder.setDate(new Date());
System.out.println("date in holder: "+holder.getDate());
Date outsideDateRef = holder.getDate();
outsideDateRef.setTime(1l);
//Date in holder will not have changed
System.out.println("date in holder: "+holder.getDate());
}
}
임 종류를 호출,하지만 난 당신이 내가 좀 더 고급 물건을 감사 그래서 시작할 때를 위해 말을 기억합니다! –
@ 페타, getter하지 말아야 * 단지 * 그 이름은 뭐라고 - 필드의 가치를 얻을? getter와 setter에 로직을 추가하는 것이 관습에 위배되는 것은 아닙니다 (일단 setter 외부에서 유효성을 검사해야한다고 들었을 때, "setter는 인수를 설정해야합니다"). – dantuch
당신이 말하는 것이 사실이라면, 그 중 유일한 목적은 필드를 읽기 전용으로 만 만들거나 (getter 만 제공하여) 작성하거나 쓰기 전용으로 만 사용할 수있는 것입니다. 그 외 필드를 직접 사용하지 않는 이유는 무엇입니까? 나는 간단한 것들 (예 : 게으른 초기화, 기본값 등)을하는 것이 좋다고 생각했지만 전문가는 아니 었습니다. –