문제

에서 Java,containsAll 및 retainAll 에 AbstractCollection 클래스 명시적으로는 카디널리티 존중하지 않습니다,그래서 다른 말로 하면 그것이 얼마나 많은 문제가되지 않의 인스턴스 값은 각 측면에서.이후로 모든 Java 컬렉션에서 표준 라이브러리 확장 AbstractCollection,그것은 그들 모두 동일하게 작동합니다.

그러나 이 문서는 이러한 방법의 컬렉션에서 인터페이스를 말하지 않습니다.중 하나이어야 유추에서 AbstractCollection,또는 이 지정되지 않은 목적에서 허용하는 하나의 정의 컬렉션에는 다르게 작동?

예를 들어,가방에 아파치의 컬렉션은 명시적으로 상태가 존중 카디널리티,그리고 주장하는 그것을 위반한 계약의 버전에서 컬렉션(되지 않지만 정말).

그래서,어떤 의미의 이러한 작업에서 컬렉션에서 보다는 오히려 AbstractCollection?

편집:깐토 사람들을 궁금해 하는 이유에 대해 나는 걱정,그것 때문에 일부분으로 내 Ph.D.내가 증명하는 개발자가 기대하지 않는 규칙 위반이에서 아파치지만,나 이해하려고 하는 이유를 수집 인터페이스를 남겨두었다 그래서 모호하다.

도움이 되었습니까?

해결책

서 javadocs for containsAll(에서 컬렉션)을 말한다:

을 반환합니다.진실한 경우 이 컬렉션 포함하는 모든 요소에 지정된 컬렉션

고 retainAll(Collection):

지만 요소에서 이 컬렉션에 포함된 지정된 컬렉션(선택사항 운영).다시 말해서,제거 이 컬렉션에서 모든 는 요소에 포함되지 않은 지정된 컬렉션입니다.

내가 읽 containsAll 의 계약하는 것을 의미 호출.containsAll(b)가 true 를 반환하는 경우에만 호출,니다.담고(벨렘)각 요소에 대한렘에서 b 가 true 를 반환합니다.나 또한 그것을 암시하는.containsAll(someEmptyCollection)도 true 를 반환합니다.당신 상태 javadocs for AbstractCollection 더 많은 명시적으로 이:

이 구현을 반복합니다 지정된 컬렉션,각 검사 요소에 의해 반환되는 반복기에 돌아보면 그것은에 포함된 이 컬렉션입니다.는 경우 모든 요소가 그렇 포함되는 사실을 반환,그렇지 않으면 거짓입니다.

는 것에 동의 연락처에 대한 컬렉션에 대한 containsAll 경 더 명시적을 피하기 위해 가능성에 대한 혼란이 있습니다.(고의 독서 javadocs for AbstractCollection 되지 않아야 합를 확인하기 위해 필요한 것 이해의 컬렉션)

내가 만들었하지 않을 것이라고 가정과 관련의 번호를 중복되는 요소를 호출한 후에 retainAll.명시된 계약에서 컬렉션(내 독서)을 의미하지는 않거나 방법 중복에서 하나 컬렉션을 것 처리할 수 있습니다.에 따라 내의 읽기 retainAll 컬렉션에서 여러한 결과입니다.retainAll(b)은 모든 합리적인:

  1. 결과 1 개의 각 요소가 적어도 하나의 사본을 모두고 b
  2. 결과를 포함 각 요소를 포함하여(중복)하는에서 이었을 제외하고,그에 있지 않은 b
  3. 또는,그 결과를 포함 사이 어딘가에 1 번호의 사본에서 발견되는 각각의 요소를 제외하고,그에 없 b.가 예상되거나#1#2 지만,가정의 어떤 세 가지 법에 따라 계약서입니다.

서 javadocs for AbstractCollection 는지 확인 사용하여#2:

이 구현에 대해 반복되 이 컬렉션을 확인,각 요소 에 의해 반환되는 반복기에 의 경우를 참조하십시오에 포함된 지정 컬렉션입니다.지 않은 경우도 포함된, 그것은 제거에서 이 컬렉션 반복기의 제거 방법

하지만 이 때문에 없는 나의 원본 컬렉션 인터페이스 계약,저지 않는 가정의 행동 수집하는 일반적으로 이 방법이 될 수 있습니다.

아마도 고려해야 할 제출하는 제안 업데이트 JavaDoc 면 당신은 끝났어.

로'왜 컬렉션의 인터페이스를 남겨두었다 그래서 모호'-나는 심각하게 그것을 의심했다는 의도적으로 완료-아마없는 무언가를 주는 그것으로 인해 우선 순위를 때 그 부분의 API 의었습니다.

다른 팁

나는 컬렉션이 이런 식으로 정의한다고 생각하지 않지만, 예를 들어 추상화 행동을 따르는 일종의 협약이되었습니다. Google 수집 do : 참조 그들의 멀티 세트 문서 (멀티 세트는 그들이 가방이라고 부르는 것입니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top