2017-10-10 9 views
0

J'ai images différentes qui se prolongent MyFrame emmagasinés dans un ArrayListTransférer la classe de la superclasse commune à la fonction; La fonction doit vérifier si un objet est instanceof passé classe

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

maintenant je veux une fonction où je passe le ArrayList et une liste des types de classe, la fonction doit mise à jour sur tous les appeler des objets types passés

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

Vous ne posent pas de question –

+0

bien la fonction foo() ne fonctionne pas comme je l'ai posté – abinmorth

+0

pour la ligne if (f instanceof c) i obtiens l'erreur « c ne peut être résolu à un type " – abinmorth

Répondre

2

1) vous n'avez pas besoin d'ajouter à la classe ArrayList, mais vous devez ajouter instance de MyFrame à la liste.

2) Et vous pouvez juste faire quelque chose comme ci-dessous

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

Modifier en fonction de votre commentaire

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 est une classe abstraite. J'ai différentes classes qui étendent MyFrame et ne veulent mettre à jour que les frames du type correct. Je veux passer la classe pour indiquer à la fonction quels cadres je veux mettre à jour. – abinmorth

+0

Même alors. L'instance réelle sera de MyFrame uniquement. Donc, en gros, si vous avez la classe A étend MyFrame et la classe B étend MyFrame, vous pouvez ajouter A et B à la liste de MyFrame et cela fonctionnera. Quel est le problème? – Optional

+0

Je veux mettre à jour seulement la classe A, pour gagner du temps d'exécution – abinmorth

1

Dans votre code, le problème est que c est pas nom du cours; c'est une variable qui fait référence à une instance d'un objet Class. Au lieu de instanceOf, utilisez:

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