Generische Datentypen

Status
Nicht offen für weitere Antworten.

molina67es

Mitglied
Hallo!

Habe mich mit generischen Datentypen beschäftigt, dazu das Openbook „Java ist auch eine Insel“ von Galileo Computing benutzt. Dabei bin ich auf ein Beispiel gestoßen, was ich nicht ganz nachvollziehen kann oder im Buch ist ein Fehler. Wäre euch dankbar, wenn einer oder mehrere mir dabei Helfen würdet dieses Beispiel zu verstehen. Wir haben folgenden generischen Datentyp Box<T> mit der Objektvariable (Eigenschaft) val vom Typ T, worauf eine Getter- und eine Setter-Methode definiert sind:

Code:
class Box<T> {
   private T val; 
   void setValue( T val ) { this.val = val; }
   T getValue() { return val; }
}
In der main()-Methode werden folgende drei Objekte inkarniert:
Box<String>  stringBox = new Box<String>(); 
Box<Integer> intBox    = new Box<Integer>(); 
Box<Point>   pointBox  = new Box<Point>();

Bei den ersten beiden ist der Aufruf der get- und set-Methode sowie die Standardausgabe (println()) kein Problem. Bei dem letzten bekomme ich eine NullPointerException, wenn ich getX() aus der Pointer-Klasse wie folgt aufrufe:
double x = pointBox.getValue().getX();
Für mich scheint es verständlich zu sein, da im gesamten Ablauf kein Point-Objekt inkarniert wurde, weshalb auch getValue() den Null-Pointer zurückgibt. Im Buch steht, das es funktionieren sollte, was ich nicht nachvollziehen kann. Kann mir da jemand helfen? Mein Denkfehler oder des Buchautors Fehler? Vielen Dank für eure Hilfe.

Grüße, Manuel
 
S

SlaterB

Gast
> Im Buch steht, das es funktionieren sollte, was ich nicht nachvollziehen kann.

offensichtlich liegt hier der Fehler (in deiner falschen Interpretation)
und du postest nicht die entsprechende Stelle?
 
S

SlaterB

Gast
ach, das ist ja schnell gefunden von so intelligenten Menschen wie mir ( ;) )

Das Schöne dabei ist, dass nun alle generischen Eigenschaften mit dem angegebenen Typ durchgeführt werden. Wenn wir etwa aus pointBox mit getValue() auf das Element zugreifen, ist es vom Typ Point:

double x = pointBox.getValue().getX();
http://www.galileocomputing.de/openbook/javainsel6/javainsel_06_013.htm#Xxx1000978

hier gehts nur darum, dass die Operation getX() sofort erkannt wird,
dass getValue() einen Point liefert ohne casten zu müssen,

von null oder nicht null ist da nicht die Rede, es wird ja auch kein vollständiges Programm gepostet
 

molina67es

Mitglied
Die ensprechende Stelle aus dem Buch ist der Programmauschnitt, welches ich hier geposetet habe. Und, was ist an meiner Interpretation falsch. Bitte um Erklärung? Wenn du das Programmstück nachfolziehst, dann wird doch das Pointer Objekt nicht initialisiert und somit kann nicht darauf zugegriffen werden, weil es eine NullPointerException auslöst. Oder? Wenn der Konstruktor des generischen Datentyps bei Pointer diesen initialisieren würde, dann könnte man später mit der get-Methode zugreifen können ohne Exception. Oder?
 
S

SlaterB

Gast
> Wenn du das Programmstück nachfolziehst, dann wird doch das Pointer Objekt nicht initialisiert und somit kann nicht darauf zugegriffen werden, weil es eine NullPointerException auslöst. Oder?

wie gesagt (vielleicht mein Posting zwischendurch noch nicht gesehen):
a.) ist das in dem Kontext überhaupt nicht betrachtet worden
b.) kann eine Zeile eh kein vollständiges Programm sein,
wo ist die class-Definition, die main oder wenigesten der Aufruf new Box<Point>();?
alles in dieser Zeile nicht da, also kannst du dich strenggenommen auch ganz anders beschweren...

irrelevant,
es geht nur um die generische Rückgabe des richtigen Typs (Point statt Object)

> Wenn der Konstruktor des generischen Datentyps bei Pointer diesen initialisieren würde, dann könnte man später mit der get-Methode zugreifen können ohne Exception. Oder?

theoretisch ja, aber macht nur bedingt Sinn,
die set-Operation ist zum Setzen des Values vorgesehen,
man muss den Value nicht unbedingt gleich im Konstruktor mitübergeben
 

molina67es

Mitglied
Hallo! Erstmals möchte ich mich bei euch bedanken für die Versuche mir bei meinem Problem auf die Sprünge zu helfen. Leider bin ich noch nicht so routiniert im posten von Java-Beiträgen. Vielleicht deshalb habe ich mich nicht richtig ausgedrückt bzw. einiges vorausgesetzt, was nicht vorauszusetzen war. Wenn ihr noch nicht genug von mir und meinem Thema habt könnte ihr euch die beiden Java-Klassen die das Problem verursacht haben im Folgenden ansehen. Letzendlich ist es ein Fehler im Buch, wer an der Erklärung interessiert ist kann sich bei mir melden. Nochmals vielen Dank.

An SlaterB: Während ich dir auf dein erstes Posting antwortete, hast du dein zweites gepostet, das ich erst nach dem Absenden meiner Antwort gesehen hatte. Danach hatte ich keine Zeit mehr darauf einzugehen, was ich jetzt tue, indem ich versuche das Problem neu zu Stellen.

An Marco13: Ja, ja! Der Garbage Collector erledigt jeden der nicht schnell genugt auf die "digitalen" Bäume kommt :lol:
 
S

SlaterB

Gast
> könnte ihr euch die beiden Java-Klassen die das Problem verursacht haben im Folgenden ansehen

kommt noch oder wie meinst du das?

> Letzendlich ist es ein Fehler im Buch

das kannst du gerne weiter glauben, Sinn macht es allerdings keinen ;)
 
G

Guest

Gast
Entschuldige, hier die beiden Java-Klassen:

Wir habe folgende Klassen, die zweite enthält die main-Methode:


Box.java

Code:
class Box<T> {
  private T val; 
  void setValue( T val ) { this.val = val; }
  T getValue() { return val; }
}


GenericBoxExample.java (enthält main-Methode)

Code:
public class GenericBoxExample {

   public static void main(String[] args) {
			
      Box<String> stringBox = new Box<String>();
      Box<Integer> intBox = new Box<Integer>();
      Box<Point> pointBox = new Box<Point>();
		
      stringBox.setValue("Generische Datentypen");
      intBox.setValue(25);
      pointBox.getValue().setLocation(12, 36);
      /* Ausgabe: Exception in thread "main" java.lang.NullPointerException
	        at GenericBoxExample.main(GenericBoxExample.java:11)
      */
     		
      System.out.println(stringBox.getValue()); // Ausgabe: Generische Datentypen; Korrekt
      System.out.println(intBox.getValue()); // Ausgabe: 25; Korrekt
      System.out.println(pointBox.getValue());

   }

}
 

Der Müde Joe

Top Contributor
pointBox.getValue().setLocation(12, 36);

der Point in der Box ist noch null....darum kannst du da auch nichts setten..

Code:
pointBox.setValue(new Point());
pointBox.getValue().setLocation(1,2);

sollte reichen um den Point in der Box zu initialisieren
 

Murray

Top Contributor
Der Müde Joe hat gesagt.:
pointBox.getValue().setLocation(12, 36);

der Point in der Box ist noch null....darum kannst du da auch nichts setten..

Code:
pointBox.setValue(new Point());
pointBox.getValue().setLocation(1,2);

sollte reichen um den Point in der Box zu initialisieren

Das war eigentlich bereits seit dem ersten Post klar - die Diskussion ging eher darum, ob man die Passage im Buch so verstehen kann, dass diese Konstrukt funktionieren müsste.
 

jPat

Bekanntes Mitglied
Im Buch sind die Beispiele ganz klar getrennt.

Erst die Klasse,

dann ein Initialisierungsbeispiel,

dann ein Zugriff.

Und: Dieses Konstrukt fuktioniert!

Was du damit anfängst, ist deine persönliche sache. Man kann aus jedem Buch-Beispiel ein "nicht lauffähiges" Beispiel machen.
Ganz einfach: copy -> paste. ;)
 

Murray

Top Contributor
jPat hat gesagt.:
Im Buch sind die Beispiele ganz klar getrennt.

Erst die Klasse,

dann ein Initialisierungsbeispiel,

dann ein Zugriff.

Und: Dieses Konstrukt fuktioniert!

Was du damit anfängst, ist deine persönliche sache. Man kann aus jedem Buch-Beispiel ein "nicht lauffähiges" Beispiel machen.
Ganz einfach: copy -> paste. ;)

Das sehe ich genauso - nur der TE halt nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
J Generische Interface - Problem Allgemeine Java-Themen 3
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
C generische Authentifizierung Allgemeine Java-Themen 7
JCODA Generische Map Frage Allgemeine Java-Themen 10
H Generische Array Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
D Methode für generische enummap/enum Allgemeine Java-Themen 10
M Generische Klassen Allgemeine Java-Themen 3
M generische Listener Allgemeine Java-Themen 2
S Generische Typen: Frage dazu Allgemeine Java-Themen 11
H generische Klasse Realtion Allgemeine Java-Themen 2
T Ideenfindung: Generische Transportklasse? Allgemeine Java-Themen 3
C Generische Methode (Schablone) Allgemeine Java-Themen 8
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
B Generische Typen instanzieren Allgemeine Java-Themen 11
R Generische Listener und Sender Allgemeine Java-Themen 12
S Generische Liste Allgemeine Java-Themen 30
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
S Generische Methode Allgemeine Java-Themen 13
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Generische Methoden Allgemeine Java-Themen 7
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
N Taschenrechner ohne explizite und implizite Datentypen Allgemeine Java-Themen 5
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
B Abstrakte Datentypen synchronisieren Allgemeine Java-Themen 11
M Technische Realisierung von Atomic Datentypen Allgemeine Java-Themen 16
D JNA Speicherbelegung der Datentypen Allgemeine Java-Themen 13
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
W Primitive Datentypen - Klassenpfad auflösen? Allgemeine Java-Themen 6
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Datentypen Kopieren von Datentypen Allgemeine Java-Themen 10
Asphorm Datentypen Datentypen werden nicht ordnungsgemäß umgewandelt Allgemeine Java-Themen 1
J Datentypen in Java Tabelle Allgemeine Java-Themen 2
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M Java-Threads und Datentypen-Zugriffe Allgemeine Java-Themen 7
O primitive Datentypen threadsicher? Allgemeine Java-Themen 13
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
X Duplikate aus eigenen Datentypen entfernen Allgemeine Java-Themen 14
I Probleme mit Datentypen Allgemeine Java-Themen 4
D Addition generischer Datentypen Allgemeine Java-Themen 12
C Primitive Datentypen in Threads Allgemeine Java-Themen 4
E Quelltext nach Datentypen durchsuchen Allgemeine Java-Themen 10
the[V]oid Primitive Datentypen Wrappen und als primitiv markieren? Allgemeine Java-Themen 7
B Eigene Datentypen Allgemeine Java-Themen 5
H Linksschieben << bei long-Datentypen Allgemeine Java-Themen 2
R Problem mit Datentypen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben