java - for each
11Fire01 07.03.2016 - 22:50 1753 6
11Fire01
Here to stay
|
for(Object obj : world){
if(obj.flag() == 0){
}
kann man eine methode aus einer anderen klasse grundsätzlich nicht so aufrufen? World ist eine array list.
|
-=Willi=-
The Emperor protects
|
Die Klasse "Object" hat keine Methode "flag". Wenn du eine ArrayList<MyClass> world hast wirst du eher etwas in Richtung "for(MyClass obj : world)" brauchen oder du castest obj nach MyClass.
|
tinker
SQUEAK
|
kann man eine methode aus einer anderen klasse grundsätzlich nicht so aufrufen? World ist eine array list. Nein, da die Methode flag() in der Klasse Object nicht existiert. Es gibt afaik zwei Möglichkeiten das Problem zu lösen: - Mach einen Typecast auf die Klasse in der die Methode flag() vorhanden ist. Am besten vorher mit instanceof überprüfen ob dein obj überhaupt eine Instanz dieser Klasse ist, nachdem da ja alles daher kommen kann.
- Alternativ zum Typecast könntest du dir auch Java Reflections anschauen und dir die Methode so holen, falls sie in obj vorhanden ist. Is aber wohl eher overkill.
Aber generell solltest du vielleicht dein Konzept überdenken. Eine Array-List mit Object find ich eher unschön. Falls nur Objekte die zu einer bestimmten Klasse gehören darin gespeichert werden, definier die Array-List mit dieser Klasse. Falls es mehrere sind und du bei allen eine Methode flag() aufrufen willst, mach ne Oberklasse.
|
Obermotz
Fünfzylindernazi
|
Du benoetigst Wildcards - am besten du siehst dir das ganze Thema Generics noch einmal genauer an.
Ich hab dir ein Skript aus unserer VL Soft2 angehaengt, darin siehst du genau, wie es funktioniert.
|
tinker
SQUEAK
|
|
11Fire01
Here to stay
|
Bearbeitet von 11Fire01 am 08.03.2016, 00:44
|
Denne
Here to stay
|
Kannst du sagen, um was für Objekte es sich genau handelt? Wie die anderen schon geschrieben gibt es mehrere Lösungen (Interfaces, Oberklassen etc), die auch alle funktionieren, aber je nach Szenario ist eine Lösung "besser" als die andere.
|