"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

java - for each

11Fire01 07.03.2016 - 22:50 1753 6
Posts

11Fire01

Here to stay
Registered: Dec 2002
Location: austria
Posts: 2417
Code: JAVA
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
Avatar
Registered: Aug 2003
Location: ~
Posts: 1624
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
Avatar
Registered: Nov 2005
Location: NÖ
Posts: 5219
Zitat von 11Fire01
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
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
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.
06-generics_212311.pdf (downloaded 118x)

tinker

SQUEAK
Avatar
Registered: Nov 2005
Location: NÖ
Posts: 5219
Oh, Generics is natürlich ein gutes Stichwort. Aber dein pdf lässt sich bei mir nicht downloaden.

Hier ist sonst noch ein Tutorial von Oracle:
https://docs.oracle.com/javase/tuto...nerics/why.html

11Fire01

Here to stay
Registered: Dec 2002
Location: austria
Posts: 2417
danke, werds mir mal durchsehen. oberklasse könnte es auch tun...

edit: hier habe ich die möglichkeit von einem common interface gefunden:
http://stackoverflow.com/questions/...fferent-classes
Bearbeitet von 11Fire01 am 08.03.2016, 00:44

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz