2012-09-18 2 views
4
private String gg; 
public void setgg(String gg) 
    { 
    this.gg = gg; 
    } 
public String getgg() 
    { 
    return gg; 
    } 

위의 코드를 고려할 때 setter 및 getters는 클래스의 개인 멤버를 처리하는 데 사용됩니다.getter와 setter가 일반 함수와 다른 점은 무엇입니까?

question1. setter가 하나 이상의 매개 변수를 사용한다면 setter가 아닐까요?

question2. 개인 데이터 멤버의 값을 설정하는 일반 공용 멤버 함수와 다른 점은 무엇입니까?

나는 우리가 재사용 가능한 코드로 세터에서 유효성 검사를 구현하고 진정한 목적을

답변

4

question1을 이해 할 수없는 여전히 예외 만 던질 수있어. setter가 하나 이상의 매개 변수를 사용한다면 setter가 아닐까요?

그것은 값을 설정 될 것이다, 그러나 값을

question2을 설정하기 위해 많은 프레임 워크가보고되는 표준 setter 메소드하지 않을 것입니다. 개인 데이터 멤버의 값을 설정하는 일반 공용 멤버 함수와 다른 점은 무엇입니까?

그들은


4

게터 참조 표준 명명 규칙과 일반 ​​public 멤버 방법이며, 손님들은 단순히 객체 지향 규칙입니다. 많은 프레임 워크는 "getX()"및 "setX (type)"메서드를 찾습니다.

다른 메서드와 다르지 않지만 메서드 머리글에서 아무 것도 추가하거나 제거하면 규칙이 적용되지 않습니다.

2

먼저 getter setter 구현은 규칙 상 잘못되었습니다. setGg 및 getGg이어야합니다.

질문에 답하십시오.

  1. 게터 설정 메소드는 객체에 값을 주입하는 표준 방법이되어 많은 프레임 워크가 뒤 따른다. 따라서 이전에 지적한 명명 규칙을 따라야합니다.

  2. 동일한 매개 변수를 수락하고 값을 동일하게 설정하는 한. 그러나 명명 규칙을 따르지 않으면 대부분의 프레임 워크가 객체에 값을 삽입 할 수 없습니다.

+0

내 변수 이름이 '메소드'인 경우 setMethod (type)는 ok가됩니다. – Nil

+1

낙타 케이싱 대회에서는 변수 이름을 대문자로 시작하지 않습니다. 컨벤션을 따라하면 당신과 당신의 코드를 관리하는 사람이 더 편하게 생활 할 수 있습니다. 질문에 대답하기 위해 'setMethod'가 될 것입니다. –

0

다른 사람들은 게터와 세터의 목적을 설명했습니다. 귀하의 코드 스 니펫에있는 구문이 Java bean 표준에 적합하지 않음을 지적하고자합니다.객체가 클래스를 연결에서 내부 구현을 숨기고 있다는 생각 : 부울

private boolean val; 

public void setVal(boolean val) { 
    this.val= val; 
} 
public boolean isVal() { 
    return val; 
    } 
2

게터와 세터에 대한

private String value; 
public void setValue(String value) { 
    this.value=value; 
} 
public String getValue() { 
    return value; 
} 

캡슐화를위한 자바 세계에서 사실상의 표준으로 뿌리를 가지고있다. 이것은 객체 지향 프로그래밍의 전체 원칙입니다.

를 예로 들어 다음 클래스를 고려

// boilerplate 

public class A { 
    public String b; 
} 

이 완벽하게 유효한 자바 클래스는 단일 필드입니다. 다른 클래스는의 B 속성을 읽어하고자하는 경우, 모든이에이 필요합니다 :

A a; 
String val = a.b; 

및 쓰기에 대한

:

a.b = val; 

여기에서 문제는 더 이상 내부 상태에 기록 제어하는 ​​없습니다 . b의 길이가 최대 1,024 문자라는 것을 알았습니다. 이제 b에 대한 쓰기의 모든 인스턴스가 새 요구 사항에 맞게 업데이트되어야합니다. 코드 기반의 크기에 따라 매우 비쌉니다.

// boilerplate 

public class A { 
    private String b; 

    public void setB(String val) { 
     this.b = val; 
    } 

    public String getB() { 
     return this.b; 
    } 
} 

지금과 같이 읽습니다 :

A a; 
String val = a.getB(); 

및 쓰기 :

a.setB(val); 

이 소요

또한, 우리는 B 캡슐화하는 getter와 setter 규칙을 사용했다 가정 단기간에 글쓰기는 더 길지만 이사회 전반의 변화는 통합하기가 훨씬 쉽습니다. 세터 변경.

캡슐화가 매우 높기 때문에 다른 많은 의견 제시자가 지적한 것처럼 많은 Java 프레임 워크에서이를 기대합니다.

0

이 질문은 오랜 시간 이었지만 답변을 게시하여 향후 독자를 도울 수 있도록했습니다. 다른 회원들이 이미 대답 한 것에 추가.
게터와 세터는 다음과 같은 방법으로 정상적인 기능에서 차이 :

  1. 그들은 일반적으로 보통의 방법과는 달리 비즈니스 로직을 포함하지 않습니다.
  2. 게터는 세터 하나의 매개 변수 만 POJO 할 수있는 클래스의 속성을 설정하고 검색하는 데 사용
  3. , DAO, 콩 등에 전달해야
  4. 그것에 전달 된 매개 변수가 없습니다
  5. 다른 사람들이 이미 언급했듯이, 이들은 Hibernate, Spring 등과 같은 프레임 워크에 의해 사용되어 데이터를 유지, 검색하고 다른 많은 작업을 수행합니다.
  6. 두 가지 기본 개념 인 캡슐화 및 축소를 구현하는 데 사용됩니다.
관련 문제