2011-08-12 4 views
11

지도가 포함 된 클래스에 게터/세터를 구현/제공하는 데 가장 좋은 방법은 무엇입니까?지도가있는 클래스의 게터/세터

public class MyClass { 

    private Map<String, String> myMap; 
    public getMyMap() { /* Return an unmodifiable map */ } 
    public setMyMap(Map<String, String> myMap) { ... } 
} 

아니면 같은 인터페이스를 제공하기 위해 더 나은 것 :

내가 보는 가장 일반적인 구현은

public getMyMap() { /* Return a modifiable map */ } 
public addToMap(String key, String value) { myMap.put(key, value); } 

을 왜 이러한 방법은 더 나은 무엇입니까?

+0

가능한 경우 두 번째 옵션을 사용하려고 시도하지만 javabean getters/setters를 노출해야하는 경우 가끔 선택의 여지가 있습니다. – sMoZely

+7

지도가 나타내는 내용 (기능 요구 사항)에 전적으로 의존합니다. 이것은 대개 클래스 및/또는 메소드에 문서화됩니다. 이것에 대한 진정한 대답은 없습니다. – BalusC

답변

9

둘 다 용도가 있습니다. 클래스에 의해 노출되는 메소드는 적절한 수준의 추상화 여야합니다. 이 클라이언트가 하나의 호출에 설정된 전체 규칙을 지정할 수있는 규칙 엔진을 말할의 경우,

void addDog(String name, Dog dog); 
Dog findByName(String name); 

: 클래스가 Map<String, Dog> 뒷받침 개 레지스트리 인 경우 예를 들어는 다음과 같은 방법을 제공 할 수있다

void setRules(Map<String, Rule> rules); 
Map<String, Rule> getRules(); 
-4

하나만 입력하면됩니다. 뭔가 같은 ...

public Map<String,String> getMyMap() 
{ 
    return myMap; 
} 

당신은 그것을 사용하고자 할 때

myClass.getMyMap().put(key,value); 

면책 조항 :이 컴파일이 대답을 테스트하지 않았고, 내가하려고 말을 일반적으로

3

) 전혀지도를 반환하지 않는 것. 열쇠를 취해 값을 돌려주는 메소드를 가져주세요. 지도를 가져 오는 것은 괜찮 으면 복사하는 것이 좋지만 키/값을 가져 와서지도에 넣는 방법은 내가 선호하는 방법입니다.

지도를 반환해야하는 경우 읽기 전용 버전 또는 사본을 보내야합니다. set 메소드는 맵을 복사해야합니다.

호출자가 클래스 내부의 데이터를 변경할 수 없도록하는 것은 좋지 않은 생각입니다. 클래스가 변경 가능 데이터를 인식, 전달 또는 보유하지 않는 것은 나쁜 생각입니다.

1

사용자의 요구 사항에 따라 달라질 수 있습니다. 이것은 대부분의 경우에 충분할 수 있습니다. 지도를 반환하는 getter 메서드가 없을 수도 있습니다. 내 플러그인을 사용하는 경우,이 메소드를 작성하는 데 도움이 될 수 있습니다. http://fast-code.sourceforge.net/documentation.htm#create-list-map Eclipse가 add 메소드를 작성하는 데 도움이되지 않습니다.

관련 문제