2017-04-21 3 views
2

나는이 같은리스트 객체와 클래스를 가지고 :자바로 목록 객체에 대한 설정기를 제공해야합니까?

  • :

    import java.util.ArrayList; 
    import java.util.List; 
    
    public class MyClass 
    { 
        private List<String> myList; 
    
        //??? 
    } 
    

    을 이제 다른 클래스 목록에 액세스 할 수 있도록하기 위해, 나는 다음 중 하나를 추가해야합니다 게터와 세터

  • 또는 게터와 세터와 빈의 ArrayList와 생성자에서 목록을 초기화

  • 또는 생성자 인수 모두 생성자

  • 또는

  • 또는 게터와 세터 전달 목록이있는 게터와 세터와 생성자에서 목록을 초기화 getter 만 생성자의 목록을 빈 ArrayList로 초기화합니다.

  • 또는 생성자의 인자를 모두 생성자

할 수있는 가장 좋은 방법은 무엇입니까와

  • 또는 만 게터를 전달 목록 생성자의 목록을 itialize? 컨벤션이 있습니까?

    EDIT : "다른 클래스가 목록에 액세스하도록 허용"은 다른 클래스가 목록과 함께 작동하게하고, 그 안에 개체를 저장하고 읽을 수있게하는 것입니다.

  • +0

    가장 좋은 방법은 필요에 따라 다르며 "다른 클래스가 목록에 액세스하도록 허용"하는 것은 분명하지 않습니다. 더 구체적으로 말하십시오. – davidxxx

    답변

    1

    클래스의 List 필드를 다른 클래스에 "제공"할 수있는 단일 방법이나 규칙이 없습니다. 으로

    내가 다른 클래스 목록 저장 작업과 개체를 읽을시키는 특정 아무것도 단지 일반적인 사용을 의미 없다 "시키는 다른 클래스는 목록에 액세스".보호 된 방법으로

    • :

    당신은 다른 클래스에 클래스에서 목록 필드에 대한 정보를 제공하기 위해 크게 두 가지 방법이 있습니다. 두 클래스는 매우 결합되도록 설계되지 않았으며 List를 포함하는 클래스에서 List에 추가 된 데이터를 보호하려고합니다.
    따라서 List에 getter 및 setter를 제공하지 않지만 대신 List에서 데이터를 읽고 추가하는 공용 메서드를 제공 할 수 있습니다.
    이런 식으로 클라이언트 클래스는 사용 된 클래스의 구현과 결합되어 있지 않습니다. 목록이 사용된다는 사실과 목록의 책임있는 단일 (추가/가져 오기/이동, ... 작업 및 규칙 적용) 그들을 위해) 그 소유자입니다.
    목록이 목록의 게터를 제공하고 액세스하지만 불가능한로 제공하여 다른 방법 : 커플 링 방식으로

    public List<YourClass> getReadonlyList(){ return Collections.unmodifiableList(originalList); }

  • . 두 클래스는 매우 결합되도록 설계되었습니다. 따라서 List에 getter와 setter를 제공하는 것은 문제가되지 않습니다. 쓸데없는 복잡성을 피할 수 있으므로 매우 적합 할 수도 있습니다.

  • 1

    데이터 은닉과 캡슐화는 항상

    이는, 많은 도구가없이 죽을 것이다 많은 살 수있는 특정 아키텍처없이 결정을 가지 어려운 좋은 원칙이다 ...

    것은 당신이 부드러운 될 수 있습니다 우리 클래스를 사용하는 개발자는 설정자를 사용하고 목록의 수정 불가능한 컬렉션을 제공 할 수 있습니다.

    MyClass의 인스턴스를 만든 후 소프트 개발자가 목록을 처리하는 데 필요한 양에 따라 다릅니다.

    +1

    어쩌면 너무 빠름 .. 답은 자세한 코멘트이지만 어쨌든 좋은 것 같습니다 :) – davidxxx