2011-04-23 5 views
0
내가 class A

A를 확장하는 class B 도움이됩니다.자바 제네릭

나는 이라는 추상 클래스와 X을 확장하는 콘크리트 클래스 Y을 가지고 있습니다. 나는 다음과 같은 작업을 수행 할 때

public Collection<B> getStuff(); 

: 나는 다음과 같은 서명 추상 메소드를 구현 Y에서

public abstract Collection<? extends A> getStuff(); 

: X에서

나는 다음과 같은 서명을 추상적 인 방법이있다 : C에서 추가 (캡처) :

classX.getStuff().add(B) 그것은 다음과 같은 불만을 주었다 ollection는

어떤 도움을 주시면 감사하겠습니다을 B로 적용 할 수 없습니다.

+7

신고 내용은 무엇입니까? –

+0

문제가'add()'메서드에 있다면'getStuff()'에 대한 서명에 대해 이야기하고있는 이유는 무엇입니까? 또는'classX'는'getStuff()'에 의해 반환 된 콜렉션입니까? – unholysampler

+1

[공분산 및 반항성] (http://en.wikipedia.org/wiki/Covariance_and_contravariance_ (computer_science) #Java)을 읽어 볼 수 있습니다. –

답변

1

X 클래스로 다음 예제를 사용할 수 있습니다. 예를 들어

,

public abstract <T extends A> Collection<T> getStuff(); 

또한 this threads를 참조 할 수 있습니다.

+0

감사합니다. 그게 내가 의도 한 바야. 그냥 호기심에서, 내 질문에 사용 된 서명은 무엇입니까 (abstract Collection getStuff()) 당신이 준 답변과 비교합니까? – Glide

+0

귀하의 경우 컬렉션은 null을 제외한 모든 값을 컬렉션 에 넣을 수 없습니다. 이 책 (Joshua Bloch의 Effective Java)을 참조 할 수 있습니다. - http://goo.gl/cCrQo – jumperchen

+0

컬렉션에 null이 들어갈 수있는 이유를 자세히 설명해 주시겠습니까 ? 서명이 A를 확장하는 모든 유형을 의미한다고 생각했습니다. – Glide