2013-02-18 4 views
4

나는 자바에 새로 온 사람과 내가 함께 일하고 있어요 코드가 크게없는 내 자신, 내가 같은 클래스의 수십 인스턴스를 포함하는 ArrayList의를 가지고 그래서 ... 나와 함께ArrayList에서 클래스 인스턴스를 가져 오는 방법은 무엇입니까?

을 부담하시기 바랍니다 어떤에서 I 차례로 변수의 값을 추출하고 싶습니다.

저는 반복기를 만들었고 arraylist를 통해 행복하게 반복 할 수 있습니다. 클래스 인스턴스를 추출하려고하면 문제가 발생합니다. .get (index)를 사용하면 Object가 반환되며 변수에 액세스하거나 자체 유형으로 인스턴스를 추출하기 위해 Object를 클래스 유형으로 변환하는 방법을 모릅니다.

누구든지 해결 방법을 조언 할 수 있습니까? 사전에

감사합니다.

편집 : 죄송합니다. 첫 번째 인스턴스에 코드를 포함해야합니다. 쉽고 훨씬 더 안전해야한다 제네릭 반복을 사용하면 ClassCastException

얻을 수 있습니다 목록에있는 모든 인스턴스 유형, 그렇지 않으면 MyClass의 있다고 가정

MyClass classInstance = (MyClass)myArray.get(0); 

:

ArrayList TopicResults = results.getTopicResults(TopicNum); 
ListIterator TopicResultsiter = TopicResults.listIterator(); 
while(TopicResultsiter.hasNext()){ 
        int idx = TopicResultsiter.nextIndex(); 
        ResultsList.Result result = TopicResults.get(idx); 
        String DocID = result.docID; 
        System.out.println(DocID); 
       } 
+4

현재 코드를 제시해주십시오 ..... – PermGenError

+2

귀하 iterator는 제네릭 매개 변수를 올바르게 지정하는 경우 Object 유형을 반환하지 않아야합니다. – Perception

+0

** 캐스팅 ** 및 ** 제네릭 ** –

답변

8

그냥 캐스팅을 사용

List<MyClass> myList = new ArrayList<MyClass>(); 
for (MyClass classInstance : myList) { 
    classInstance.doSomething(); 
} 

<>은 목록에 저장할 수있는 객체의 유형을 지정하므로 컴파일 타임에 이미이 유형을 확인하지 않아도 목록 구성원을 안전하게 사용할 수 있습니다. 당신은 직접 ArrayList에 같은 유형의 attribut에 ArrayList에의 "GET"방법에 의해 반환 된 개체를 할당 할 수

+3

(from 1.7 :'List myList = new ArrayList <>();') –

+0

마침내 그들은이 redudancy를 없앴습니다. – giorashc

+0

글쎄요. 새로운 List를 원한다면 어떤 구현이 될지 알 것입니다./1.5에서, 짧은 목록'List myList = new ArrayList();'를 사용할 수 있습니다. 경고를 받겠지 만 (대부분의 사람들은 완전히 무시하는 것처럼 보입니다). –

1

MyType object = (MyType) list.get(index);

1

(1.5 J2SE에서 가능). 예를 들어

, 당신은

ArrayList<MyType> myList; 

단지 명시 적으로 타입 캐스팅없이 작동 ...

MyType myObjectf = myList.get(0); 
를 사용하는 경우

+0

오른쪽. ArrayList의 원시 사용은 이전 버전과의 호환성을 유지합니다. – Javier

관련 문제