2016-04-17 1 views
0

Entschuldigung, wenn die Frage verwirrend ist. Hier ein Beispiel:Wie überprüft man, zu welcher Kindklasse eine Variable in einer ArrayList mit 2 Kindtypen von 1 Elternteil gehört?

Es gibt eine ArrayList, die Daten vom Typ "Shape" enthält.

"Circle" und "Triangle" sind beide Kinder von "Shape". Der Kreis hat die Methode calculateRadius(). Dreieck nicht und kann nicht.

Ich möchte durch alle Formen in der Arraylist suchen und den Suchradius überprüfen:

for(Shape s : shapeList) 
{ 
    System.out.println(s.calculateRadius); 
} 

Ich verstehe, das wird nicht funktionieren, da weder Form noch Dreieck diese Methode hat. Gibt es eine Möglichkeit, zu überprüfen, ob die Form in der Liste ein Kreis oder ein Dreieck ist, und dann den Radius zu berechnen, wenn die Form ein Kreis ist?

Wie Liste definiert wurde und Daten hinzugefügt wurde:

ArrayList<shape> shapeList = new ArrayList<shape>; 

... 

Circle c = new Circle(a, b, c, radius); 
Triangle t = new Triangle(a, b, c, type); 
shapeList.add(c); 
shapeList.add(t); 
+1

Sie * könnten * lösen dies mit instanceof, aber das wäre ein hässlicher Klud. Es ist besser, wenn Sie das Entwurfsmuster "Besucher" verwenden können. –

Antwort

0

es einfach zu halten, geben Sie überprüfen gerade vor der Verwendung;

for (Shape s : shapeList) 
{ 
    if (s instanceof Circle) 
    { 
     System.out.println(((Circle) s).calculateRadius); 
    } 
} 
+0

Danke! Ich habe instanceof vorher nicht verwendet, aber das war genau das, was ich brauchte. –

+0

@ J.Swann Kein Problem. Bitte akzeptieren Sie die Antwort, wenn es für Sie funktioniert hat, also verbringen andere keine Zeit damit, daran zu arbeiten –

Verwandte Themen