2012-10-16 1 views
0
public void verschuif1(){ 
    for(Object x : puntenLijst){ 
     x.verschuif2(3, 3); 
    } 
} 

puntenLijst는 다른 클래스의 객체 인스턴스에 대한 ArrayList입니다. 이제 ArrayList의 모든 객체를 반복하는 foreach 루프를 사용하여 뭔가를 시도하고 다른 클래스의 verschuif2() 메서드를 사용합니다.foreach 루프를 사용하여 ArrayList의 다른 클래스에서 메서드를 사용합니까?

하지만 작동하지 않는 것 같습니다.

아무도 도와 줄 수 있습니까?

고맙습니다.

+0

아마도 컴파일러가 네덜란드어를 이해하지 못합니까? – irreputable

답변

6

먼저 개체를 캐스팅해야합니다 :

for (Object x : puntenLijst){ 
    ((MyObject)x).verschuif2(3, 3); 
} 

또는, 당신은 당신의 ArrayList에서 제네릭을 사용할 수 있습니다. 따라서이 같은 ArrayList을 위해 :

ArrayList<MyObject> puntenLijst 

당신은 모두 캐스팅 피할 수 :

for (MyObject x : puntenLijst){ 
    x.verschuif2(3, 3); 
} 

관련을 : Why use Generics

0

당신에게 방법

((ClassName) x).verschuif2(3, 3); 

를 호출하기 전에 캐스팅이 필요 컴파일해라. 보다 나은

은 (유형 안전하지 않은 것으로 간주되는)

List<ClassName> puntenLijst = new ArrayList<ClassName>(); 

은 다음 캐스팅 할 필요가 없습니다 목록은 일반적인 만드는 것입니다. 그런 다음 다음과 같이 반복합니다.

for (ClassName x : puntenLijst){ 
    x.verschuif2(3, 3); // no casting required 
} 
0

문제는 루프가 객체 참조에서 작동한다는 것입니다. 메서드에서 Object가 선언되지 않으면 코드에서 메서드 호출이 유효하다는 것을 알 수 없습니다. puntjenblist이 유사하게 선언하는 당신이 필요로 WHT

은 다음과 같습니다 {타입}가 versschuif2 방법을 선언하는 몇 가지 클래스

컬렉션.

그런 다음 for 루프에서 해당 메소드를 호출하기 위해 {type}을 통해 객체를 참조 할 수 있습니다.

그런 식으로 for 루프는 콜렉션의 모든 오브젝트가 호출 할 수있는 메소드를 가지고 있다는 것을 알고 있습니다.

관련 문제