2017-10-10 4 views
0

을 전달되면 기능 나는 내가 ArrayList를하고 클래스 유형의 목록을 통과 어디 기능을 원하는일반 수퍼 클래스의 클래스를 함수에 전달합니다. 객체가 instanceof를 클래스

abstract public class MyFrame extends JFrame { 
    public MyFrame(){ 
     super(); 
    } 
    abstract public void update(); 
} 

지금의 ArrayList에 저장 MyFrame을 확장 서로 다른 프레임을 확인해야합니다,이 함수는해야 전달 된 유형

public void foo(ArrayList<MyFrame> frames, ArrayList<Class> types){ 
    for(MyFrame f : frames){ 
     for(Class c : types){ 
      if(f instanceof c){ 
       f.update(); 
      } 
     } 
    } 
} 
+0

당신은 잘 의심 –

+0

foo는() 함수는 내가 선을 위해 – abinmorth

+0

을 게시하는 방법을 작동하지 않습니다를 요구하지 유형 " – abinmorth

답변

2

1의 모든 객체에 대한 업데이 트를 호출) 당신은 위해 ArrayList 클래스를 추가 할 필요가 없습니다하지만 당신은 목록에 MyFrame의 인스턴스를 추가해야합니다.

2) 그리고 당신은 그냥 할 수있는 일 등의 의견에 따라

public void foo(List<MyFrame> frames){ 
    for(MyFrame f : frames){ 
       f.update(); 
    } 
} 

편집 아래

코드에서
import java.util.ArrayList; 
import java.util.List; 


public class Main { 
    public static void main(String[] args) { 
     List<MyFrame> myFrameList = new ArrayList<MyFrame>(); 
     myFrameList.add(new A()); 
     myFrameList.add(new B()); 
     foo(myFrameList,A.class); 


    } 
    public static void foo(List<MyFrame> myFrameList, Class c) 
    { 
     for(MyFrame f:myFrameList) 
     { 
      if(c.isInstance(f)) 
      { 
       f.update(); 
      } 
     } 
    } 
} 

abstract class MyFrame 
{ 
    public abstract void update(); 
} 
class A extends MyFrame 
{ 

    @Override 
    public void update() { 
     System.out.println("Aaaaa"); 
    } 

} 

class B extends MyFrame 
{ 

    @Override 
    public void update() { 
     System.out.println("Bbbb"); 
    } 

} 
+0

MyFrame은 추상 클래스입니다. MyFrame을 확장하고 올바른 유형의 프레임 만 업데이트하려는 다른 클래스가 있습니다. Class를 전달하여 어떤 프레임을 업데이트할지 알려주고 싶습니다. – abinmorth

+0

그럼에도 불구하고. 실제 인스턴스는 MyFrame으로 만 구성됩니다. 따라서 기본적으로 클래스 A가 MyFrame을 확장하고 클래스 B가 MyFrame을 확장하면 A와 B를 MyFrame의 List에 추가 할 수 있습니다. 문제가 무엇입니까? – Optional

+0

실행 시간을 절약하기 위해 클래스 A 만 업데이트하고 싶습니다. – abinmorth

1

, 문제는 c가되지 않는 것입니다 클래스 이름; 이것은 Class 개체의 인스턴스를 참조하는 변수입니다. 대신 instanceOf의 사용 : 내가 오류 "C가 해결 될 수 없다 (다 instanceof를 F)의 경우

public void foo(ArrayList<MyFrame> frames, ArrayList<Class> types){ 
    for(MyFrame f : frames){ 
     for(Class c : types){ 
      if(f.getClass() == c){ 
       f.update(); 
      } 
     } 
    } 
} 
관련 문제