2010-06-10 5 views
2

그래서 3 개의 클래스가 있습니다.자바 제네릭 질문

메인 메소드를 포함 클래스 D에서
Abstract class A 

Class B extends class A 

independent Class C 

, I가 클래스 B의 인스턴스 목록을 생성

클래스 CI 지금의
List<B> b = methodCall(); // the method returns a list of instances of class B 

가 A 및 B 모두에 공통적 인 하나의 방법, 및 그러므로 나는 그것을 복제하고 싶지 않다.

public void someMethod(List<A> a) 

을하지만, 내가 할 때 :

C c = new C(); 
c.someMethod(b); 

내가 오류가 일부-방법을 적용 할 수없는 것을 다음과 같이 I는 입력으로 클래스 A의 인스턴스를 취 하나의 방법을 갖고 싶어 인수가 List<B> 인 경우 대신 List<A>이 필요합니다.

이 문제를 해결할 수있는 좋은 방법이 있습니까? 많은 감사!

public void someMethod(List<? extends A> list) 

이 목록을 할 수 있습니다 : 당신이 List<A>을 기대 방법 및 클래스 B extends A를 가지고 있고,이 방법 A List<B>를 전달하려는 경우로

+0

이 상속 문제되지 않습니다, 그것은 제네릭 질문입니다. 제네릭 튜토리얼을 검토하십시오. http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf –

+0

실제 함수 정의와 가져 오는 오류의 복사본을 포함 할 수 있습니까? – VeeArr

답변

8

는, 당신은 방법을 선언해야 메서드에 전달되어 A의 목록 또는 B를 확장하는 항목이됩니다.

?의 정확한 유형을 메서드에 전달할 수는 없지만 유의하십시오.

또한 두 클래스 사이에 중복 된 메소드가있는 경우 이는 아마도 디자인과 관련이있는 신호 일 것입니다.

+0

고마워요! 그것은 내 문제를 해결했다. 이 옵션에 대해 몰랐습니다. – user247866

+0

그런 다음 대답을 수락하십시오. –

3
public void someMethod(List<? extends A> a){ //... 
+0

음, 질문이 계속 편집되어 포스터가 제네릭을 사용하려고하는지 여부는 알 수 없습니다. –

+0

충돌 메타 편집. –

1

서명 방법에는 List<A> a이 있습니다. 이는 A 유형의 개체 목록 만 허용 함을 의미합니다. 당신이 필요로하는 것은 Aany subtype of A (또는 A의 하위 유형의 패밀리)리스트를 받아들이는 것입니다.

는 당신이 필요로하는 것은 이것이다 :

public void someMethod(List<? extends A> list) { 
    ... 
}