2011-03-29 5 views
1

기본적으로 특정 클래스의 서브 클래스를 보유 할 수있는 목록 필드를 포함하는 추상 클래스가 있어야하며 특정 클래스의 특정 서브 클래스를 저장하는 구체적인 클래스를 작성해야합니다 . 더 나은 코드 설명Java 일반 콜렉션 및 상속

나는 확신 :

public class A { 
} 

public class B extends A { 
} 

public abstract class AbsClass { 
    protected List<? extends A> list; 
} 

public class ConClass extends AbsClass { 
    list = new ArrayList<B>(); 
} 

위의 코드와 함께 내가 컴파일러 오류

The method add(capture#3-of ? extends A) in the type List < capture#3-of ? extends A> is not applicable for the arguments (B)

목록이 인스턴스화 라인을 얻을.

어떻게 작동합니까?

+0

당신의 컴파일 오류에 대해서 : 심지어 서브 클래스에 인스턴스를 이동할 필요가 없습니다 그 시점에서 물론

public abstract class AbsClass<T extends A> { protected List<T> list; } public class ConClass extends AbsClass<B> { list = new ArrayList<B>(); } 

당신은 세부 사항을 떠난다. 이 에러는 당신의 할당이 아니라'list.add' 메소드를 호출하는 것과 관련이 있습니다. 다른 이유로 코드가 컴파일되지 않습니다. 즉 할당은 생성자 또는 초기화 자 블록 외부에서 발생합니다. –

+0

는 저에게 잘 작동합니다 ... 반드시해야합니다 ... –

답변

7

AbsClass을 입력하면됩니다.

public abstract class AbsClass<T extends A> { 
    protected List<T> list = new ArrayList<T>(); 
} 

public class ConClass extends AbsClass<B> { 
    //... other stuff ... 
}