Dez 05

Heute wollen wir uns mal die Übergabe von List ohne jegliche Einschränkungen anschauen:

public static void checkStatus_list (List <?> a){ … }
oder
public static void checkStatus_list (List<Object> a){ … }

Auf den ersten Blick sieht es aus, als wären beide Methoden gleich, aber es gibt Unterschiede:

Bei der Übernahme von  <?> ist die Funktion add(Object) ausgeschaltet; ein CompilerFehler wird ausgeben. Hintergrund ist einfach, dass Probleme bei verschiedenen Objekttypen, bzw. deren späterer Weiterbehandlung vermieden werden soll.

Bei der Übernahme von (List<Object> a) kann auch nur der Typ List <Object> übergeben werden, und keine Subklassen. Somit ist für unser Beispiel (List mit Objekten vom Typ Buchhalter, Verkäufer und Angestellter) diese Methode nicht brauchbar.

Tagged with:
Dez 01

Heute wollen wir die Methode checkStatus_list erneut abändern:

public static void checkStatus_list (List <? extends Angestellter>  a){ … }

Obwohl Serializable ein Interface ist, muss in diesem Falle extends benutzt werden, alles andere ergibt einen CompilerFehler!

Um durch die Objekte durchgehen und überschriebene Methoden aufrufen zu können, ist kein Cast notwendig:

for (Angestellter b : a)
System.out.println(“List yyy ” +b.getName());

Das Hinzufügen weiterer Elemente innerhalb der Methode ist nicht möglich.

Weitere Funktionen dieser Wildcard-Art werden im SCJP nicht abgefragt, deswegen werde ich fürs Erste nicht weiter darauf eingehen.


Tagged with:
Nov 25

Das die Zuweisung

a.add(new Buchhalter());
a.add(new Verkäufer());

in unserem vorherigen Beispiel funktioniert, haben wir ja schon vor ein paar Tagen durchgesprochen.

Gehen wir mal davon aus, dass wir überschriebene Methoden haben:

class Buchhalter extends Angestellter{String getName(){ return(“Buchhalter”);}}
class Verkäufer extends Angestellter{ String getName(){ return (“Verkäufer”);}}

Diese Funktionen können direkt und ohne Probleme augerufen werden, weil ja zur Laufzeit nicht mehr zwischen Array und ArrayList unterschieden wird:

System.out.println(a.get(0).getName()); // Ausgabe: Buchhalter
System.out.println(a.get(1).getName()); //Ausgabe: Verkäufer

Tagged with:
Nov 10

die Methode get() möchte ich aufgrund der Fehlerproblematik zur Laufzeit nochmal genauer erklären:

der Rückgabwert von get() ist bei non-generics eine Referenz von java.lang.Objekt, ansonsten eine Referenz vom jeweils bestimmten Objekt-Typ.

Dies bedeutet, dass bei non-generics eine Umwandlung in einen primitiven Wert nicht statt finden kann, da unboxing sich nur auf einen Wrapper (bzw dessen Klassenreferenz ) bezieht. Ein Cast kann hier Abhilfe schaffen:

List <Integer> a= new ArrayList<Integer>(); // generic
a.add(3);
int b = a.get(0);
// problemlose Zuweisung des int-Wertes durch Wrapper

List c = new ArrayList ();
// non-generic
c.add(3);
int d = (Integer)c.get(0);
// Zuweisung nur durch expliziten Cast möglich, da Referenz von java.lang.Object zurückgegeben wurde.

Tagged with:
Sep 14

Kann eine als public static definierte Methode in jeder Subklasse ohne explizite Referenzierung aufgerufen werden?

Antwort/ answer
Tagged with:
Aug 26

Kann eine Methode, die  in der Oberklasse als private final deklariert wurde, in einer Unterklasse implementiert werden?

Antwort/ answer
Tagged with:
Jul 16

Welche Code-Zeilen können unabhängig voneinander in den Code eingesetzt werden, so dass dieser einwandfrei compiliert und ausgeführt werden kann?

public class Angestellter  { }
class Buchhalter extends Angestellter {

static public void main(String[] Args){ }

public Angestellter getInfo (){ /* Hier Code einsetzten */  }

}

  • return null;
  • return new Angestellter();
  • return new Object();
  • return this;
  • return “Angestellter”;
Antwort/ answer
Tagged with:
Jul 14

Was passiert, wenn folgender Code ausgeführt wird:

public class Angestellter {

public static void main(String PersNr[]) {

printPersNr(PersNr);

}
public void printPersNr(String[] PersNr) {

System.out.println(PersNr);
System.out.println(PersNr[1]);

}

}

Antwort/ answer
Tagged with:
Jun 15

Wir haben ja schon im Zusammenhang mit Wrappern gelernt, dass man jeden Datentyp in einen String umwandeln kann; hier nochmal zur Erinnerung:

String a = Double.toString(1.23);

Heute wollen wir uns diese Methode im Zusammenhang mit Objekten nochmal genauer anschauen:

Zuersteinmal ein Beispiel ohne toString()-Methode:

class Angestellter {

public static void main(String[] args) {

Angestellter a = new Angestellter ();

System.out.println(a);

}

}

}

Die Ausgabe lautet hier Angestellter@19821f oder ähnlich.

Jetzt überschreiben wir die toString()-Methode:

class Angestellter {

public String toString()

{

return (“Dies ist ein neuer Text für diese Klasse”);

}

public static void main(String[] args) {

Angestellter a = new Angestellter ();

System.out.println(a);

}

}

}

Hier lautet die Ausgabe Dies ist ein neuer Text für diese Klasse.

Objekte werden also bei der Ausgabe mittels toString() in einen String umgewandelt.  Wie üblich kann eine solche Methode beliebig überschrieben werden, solange die Gesetze der Überschreibung beachtet werden

Tagged with:
preload preload preload
http://www.wikio.de Blog Top Liste - by TopBlogs.de Blogverzeichnis - Blog Verzeichnis bloggerei.de Bloggeramt.de Software
Webbhotell Top Blogs