2014-03-25 5 views
6

제목에서 알 수 있듯이 모든 프로그래밍 언어에서 getter 및 setter에 대한 토론이 항상 있었으며 Java에서도 마찬가지였습니다.Java 8 이후에 getter 및 setter를 사용하는 새로운 인수가 있습니까?

질문은 다음과 같습니다. 새로운 인수가 있습니까? Java 8이 출시 되었습니까?

기존 인수의 예는 getters 및 setters가 상태를 캡슐화하거나 API를 변경하지 않고 구현을 변경할 수 있다는 것입니다.

답변

12

예, 있습니다! Java 8 메소드 참조가 소개되었으므로 이름에서 알 수 있듯이 메소드에서만 사용할 수 있습니다.

다음과 같은 코드를 생각해

class Person { 
    private String firstName; 
    private String lastName; 

    public Person(final String firstName, final String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

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

    @Override 
    public String toString() { 
     return firstName + " " + lastName; 
    } 
} 

우리가 할 수있는, 우리가 그들의 성을 기준으로 그룹화 사람들의 목록이 포함 된지도를 가져올 가정을 그 다음 코드와 방법 참조를 통해 : 출력합니다

List<Person> personList = new ArrayList<>(); 
personList.add(new Person("Shannon", "Goldstein")); 
personList.add(new Person("Donnie", "Denney")); 
personList.add(new Person("Mark", "Thomas")); 
personList.add(new Person("Julia", "Thomas")); 
Map<String, List<Person>> personMapping = personList.stream() 
     .collect(Collectors.groupingBy(Person::getLastName)); 
System.out.println("personMapping = " + personMapping); 

는 잘 포맷 :

personMapping = { 
    Thomas=[Mark Thomas, Julia Thomas], 
    Goldstein=[Shannon Goldstein], 
    Denney=[Donnie Denney] 
} 

public 변수를 사용하면 이 아닌 변수가 사용됩니다. 메소드 참조를 얻을 수 없으며, 필요하지 않은 본격적인 람다 작성 이외의 다른 방법으로 참조 할 수 없습니다.
(호기심 사람들을 위해 : person -> person.lastName가 사용 된해야합니다)

또한,이 대답은 주장하는 사람과 다른 것을 명심 그 객체가 특정 인터페이스를 준수 할 필요가있는 경우, 그 다음 getter 및 setter는 해야을 사용하십시오. 이 예제에서와 같이 Person 클래스는 인터페이스가 없어도 getter를 사용할 수있는 이점이 있습니다.

+1

+1 나는 항상 짧은 게터/세터'무효과 lastName (문자열과 lastName)'와'문자열이 lastName을 선호했다()'당신이 제안을 팝업 당신의 IDE를 설정하면 그들에게 매우 성가신 찾을 –

+5

@PeterLawrey 입력 할 때'getXXX' 버전과 마찬가지로'g'를 입력하면 모든 getters의 목록을 즉시 얻을 수 있습니다. – skiwi

+1

IDE에서 볼 수있는 필드 이름 옆에 가서()를 추가하십시오. 어쨌든 그것은 단지 스타일의 문제이며 나는 당신의 대답에 동의합니다. –

-4
public class Customer { 
    private String email; 
    public void setEmail(String email) { this.email = email; } 
    public String getEmail() { return email; } 
} 
+0

이것은 원래 질문을 다루지 않습니다. 이것은 Java에서 setter 및 getter의 표준 예제 일뿐입니다. –

관련 문제