2011-02-17 9 views
2

어쩌면 내가 뭔가를 놓친 거지하지만 난 같은 내 클래스를 선언하면 생각 :자바의 Iterable <Iterable<T>> 위해 ArrayList <ArrayList<T>>

public class Something<T> implements Iterable<Iterable<T>> { 
    public Something(Iterable<Iterable<T>> input) { 
    ... 

내가 같은 인스턴스화 할 수 있어야한다 :

ArrayList<ArrayList<String>> l = new ArrayList<ArrayList<String>>(); 

Something<String> s = Something<String>(l); 

불행히도 이것은 나에게 오류를 유발합니다. 나는 ArrayLists가 반복 가능하다고 생각하여 정확히 내 생성자 정의에 매핑해야한다.

답변

7

당신은 일반적인 유형은 문자 그대로 다른 일반적인 유형을 확장 할 수 없기 때문에 이것에 대한 이유는 Iterable<T>

public Something(Iterable<? extends Iterable<T>> list){} 

확장 것을 허용하도록 생성자를 수정해야합니다. List<String>List<CharSequence>에 할당 할 수 없습니다. 키워드 extends을 사용하면 이러한 유형의 지정이 가능합니다.

+0

감사합니다,하지만 여기에 지금은 무엇입니까 경고 : '공용 클래스 뭔가 이의 Iterable에게 > { \t \t 개인의 Iterable > 입력을 구현; \t \t 공개 뭔가 { \t \t this.input = (Iterable을 >) 입력 (입력의 Iterable >); \t}' – Pass

+0

나는 Josh Bloch의 Effective Java 사본을 찾고 "PECS"를 읽는 것이 좋습니다. 그것은 당신이 정말로 무슨 일이 일어나는지 이해하는 데 도움이 될 것입니다. 어쨌든, 당신은'Iterable ''ArrayList >' – Jeremy

+0

또는 아마도'Iterable >'' – newacct

관련 문제