2012-10-03 3 views
1

Collection은 봉쇄를 확인하고 요소를 추가하거나 제거 할 수있는 크기의 Iterable입니다. Iterable을 상속 한 객체가 있고 크기는 있지만 Collection의 다른 기능은 아닙니다. '지원되지 않는'예외가있는 Collection 메서드를 구현하고 싶지 않습니다.size() - Iterable과 Collection 사이의 Iterable 용 관용구?

내 개체를 확장 할 수있는 IterableCollection 사이에 일반적으로 사용되는 중간급 클래스가 있습니까? 'SizedIterable'같은 것? 또는 더 일반적으로 적절한 관용구?

참고 : 예, 실제로 회원 자격을 확인할 수는 없지만 크기는 있습니다.

+0

... 반복 할 수 있다면 철저한 검색을 통해 회원 자격을 확인할 수 있습니까? –

답변

4

Iterable을 확장하는 고유 한 인터페이스를 만들면 어떨까요? 이렇게하면 사용자 지정 개체에 추가 할 기능을 정의 할 수 있습니다. 이 같은

뭔가 아마도

public interface SizedIterable<T> extends Iterable<T> { 
    int size(); 
} 
+0

휠체어를 재발 명하고 있기 때문에 컨벤션이 있다면 그것을 사용하고 싶습니다. – einpoklum

+0

@Gamb이 제안하는 컨벤션이라고 생각합니다. 내가 너라면 그걸 갈거야 – RNJ

+0

@ MyNameIsTooCommon 그 편집으로 추가 마일을 보내 주셔서 감사합니다, 나는 그것을 그리워하고 그것이 필요했다. – Gamb

1

짧은 대답은 no입니다.

긴 대답 :이 인터페이스가 필요합니까? 그것을 위해 무엇을 사용할 계획입니까? 이와 동일한 (매우 예외적 인) 속성을 가진 여러 가지 클래스와 그 메소드에 의존하는 몇 가지 메소드가 없다면,이 인터페이스에 대한 명백한 필요성을 생각할 수 없습니다.

표준 라이브러리 함수/클래스에이 객체를 전달 하시겠습니까? 이 메소드들은 실제로 size()를 호출 할 것인가?

그렇다면 아마도 Collection을 구현 한 다음 add()/remove()/contains()/etc에 대해 no-ops를 적절히 설정해야합니다.

이 인터페이스가 정말로 필요하다면 Iterable을 확장하는 것이 좋은 방법입니다.

public interface SizedIterable<T> extends Iterable<T> { 
    public int size(); 
} 
+0

주문에 의한 답변 : 나는 몰라, 그래서 내가 물었다. 나는 여러 가지 다른 클래스를 가지고있다. Iterable을 제외하고 표준 함수에 전달할 계획이 아닙니다. 하지만 대답 주셔서 감사합니다 ... – einpoklum