Discussion:
Generics Casting Theorie-Frage
(zu alt für eine Antwort)
Burkhard Hassel
2006-02-17 12:37:53 UTC
Permalink
Hallo da draußen,

ich habe eine Frage bezüglich Generics. Und zwar habe ich die übliche Box,
eine Art Container, für parametrisierte Datentypen. Dazu mache ich im
Hauptprogramm dann spezifische Boxen für Objekte wie Points, Fische und
Strings. Auf diese referenziere ich eine Raw Type Box, stecke was falsches
rein und hole es wieder raus und drucke sie.

Meine Frage: Wieso bekomme ich eine ClassCastException NUR bei der
String-Box?


Ich weiß, das kein vernünftiger Mensch so programmiert, deshalb habe ich
im Subject ja auch geschrieben "Theorie-Frage".
Hat jemand 'ne Idee?



Gruß, Bu.


p.s. Der Fisch sollte nur ein Beispiel für eine einfache selbstgemachte
Klasse sein. Ich wollte erst Amseln nehmen, aber wir haben ja jetzt
Vogelgrippe.




ab hier kommt nur noch Code:



///////////////////////// erste Datei: Box.java /////////
class Box <T> {
private T value;
void setValue (T value) {
this.value = value;
}
T getValue () {
return value;
}
}


class Fisch {
int flossen = 6;
@Override
public String toString() {
return getClass().getSimpleName() +
"\t" + flossen + " Flossen";
}
}

/////////////////////////// Zweite Datei: BoxenCasting.java ////////////
import java.awt.Point;
import java.util.Date;

class BoxenCasting {

public static void main(String[] args) {
Box <Point> poibox = new Box<Point>();
Box <Fisch> fisbox = new Box<Fisch>();
Box <String> strbox = new Box<String>();
Box objectBox;

// Date in die Point-Box (geht)
objectBox = poibox;
objectBox.setValue( new Date());
System.out.println(objectBox.getValue() );
System.out.println(poibox.getValue() );

// Point in die Fisch-Box (geht)
System.out.println();
objectBox = fisbox;
objectBox.setValue( new Point (12, 4));
System.out.println(objectBox.getValue() );
System.out.println(fisbox.getValue());

// Date in die String-Box: Class Cast Exception beim Rausholen
System.out.println();
objectBox = strbox;
objectBox.setValue( new Date());
System.out.println(objectBox .getValue() ); //geht
// System.out.println(strbox.getValue() ); //ClassCastException

}
}
Karl Wiggisser
2006-02-17 13:46:17 UTC
Permalink
Hallo,
Post by Burkhard Hassel
Meine Frage: Wieso bekomme ich eine ClassCastException NUR bei der
String-Box?
/////////////////////////// Zweite Datei: BoxenCasting.java ////////////
import java.awt.Point;
import java.util.Date;
class BoxenCasting {
public static void main(String[] args) {
Box <Point> poibox = new Box<Point>();
Box <Fisch> fisbox = new Box<Fisch>();
Box <String> strbox = new Box<String>();
Box objectBox;
// Date in die Point-Box (geht)
objectBox = poibox;
objectBox.setValue( new Date());
System.out.println(objectBox.getValue() );
System.out.println(poibox.getValue() );
Hier erwartet Java einen Punkt. Nachdem es aber ein println(Point p)
gibt, wird println(Object o) aufgerufen und dort irgendwann
String.valueOf(o) (lt. Eclipse). Nachdem jetzt bei getValue() etwas
zurückkommt, dass eine toString() Methode hat funktioniert das ...
Post by Burkhard Hassel
// Point in die Fisch-Box (geht)
System.out.println();
objectBox = fisbox;
objectBox.setValue( new Point (12, 4));
System.out.println(objectBox.getValue() );
System.out.println(fisbox.getValue());
Siehe oben.
Post by Burkhard Hassel
// Date in die String-Box: Class Cast Exception beim Rausholen
System.out.println();
objectBox = strbox;
objectBox.setValue( new Date());
System.out.println(objectBox .getValue() ); //geht
// System.out.println(strbox.getValue() ); //ClassCastException
Hier erwartet Java einen String. Nachdem und ruft dementsprechend
println(String s) auf. Jetzt kommt aber kein String sondern ein Date
daher => ClassCastException.
Post by Burkhard Hassel
}
}
Das ist die Interpretation die wir hier zu viert entwickelt haben. Falls
wir falsch liegen, bitte berichtigen ...

lg Karl
Karl Wiggisser
2006-02-17 13:47:09 UTC
Permalink
Post by Karl Wiggisser
Hallo,
Post by Burkhard Hassel
Meine Frage: Wieso bekomme ich eine ClassCastException NUR bei der
String-Box?
/////////////////////////// Zweite Datei: BoxenCasting.java ////////////
import java.awt.Point;
import java.util.Date;
class BoxenCasting {
public static void main(String[] args) {
Box <Point> poibox = new Box<Point>();
Box <Fisch> fisbox = new Box<Fisch>();
Box <String> strbox = new Box<String>();
Box objectBox;
// Date in die Point-Box (geht)
objectBox = poibox;
objectBox.setValue( new Date());
System.out.println(objectBox.getValue() );
System.out.println(poibox.getValue() );
Hier erwartet Java einen Punkt. Nachdem es aber ein println(Point p)
hier fehlt ein "k"-^
Post by Karl Wiggisser
gibt, wird println(Object o) aufgerufen und dort irgendwann
String.valueOf(o) (lt. Eclipse). Nachdem jetzt bei getValue() etwas
zurückkommt, dass eine toString() Methode hat funktioniert das ...
Post by Burkhard Hassel
// Point in die Fisch-Box (geht)
System.out.println();
objectBox = fisbox;
objectBox.setValue( new Point (12, 4));
System.out.println(objectBox.getValue() );
System.out.println(fisbox.getValue());
Siehe oben.
Post by Burkhard Hassel
// Date in die String-Box: Class Cast Exception beim Rausholen
System.out.println();
objectBox = strbox;
objectBox.setValue( new Date());
System.out.println(objectBox .getValue() ); //geht
// System.out.println(strbox.getValue() ); //ClassCastException
Hier erwartet Java einen String. Nachdem und ruft dementsprechend
println(String s) auf. Jetzt kommt aber kein String sondern ein Date
daher => ClassCastException.
Post by Burkhard Hassel
}
}
Das ist die Interpretation die wir hier zu viert entwickelt haben. Falls
wir falsch liegen, bitte berichtigen ...
lg Karl
Malte Schirmacher
2006-02-17 13:58:42 UTC
Permalink
Post by Karl Wiggisser
Hier erwartet Java einen Punkt. Nachdem es aber ein println(Point p)
gibt, wird println(Object o) aufgerufen und dort irgendwann
String.valueOf(o) (lt. Eclipse). Nachdem jetzt bei getValue() etwas
zurückkommt, dass eine toString() Methode hat funktioniert das ...
[...]
Hier erwartet Java einen String. Nachdem und ruft dementsprechend
println(String s) auf. Jetzt kommt aber kein String sondern ein Date
daher => ClassCastException.
Das ist die Interpretation die wir hier zu viert entwickelt haben. Falls
wir falsch liegen, bitte berichtigen ...
Tut ihr wohl, denn die Generics existieren NUR und ausschließlich in den
Sourcen und übertragen sich nicht in das Kompilat. Dort steht überall wo
auf T zugegriffen wird nur Object, somit kann eure Interpretation nicht
stimmen, oder irre ich mich?
Post by Karl Wiggisser
lg Karl
--
MfG
Malte Schirmacher
Patrick Roemer
2006-02-17 14:19:32 UTC
Permalink
Post by Malte Schirmacher
Post by Karl Wiggisser
Hier erwartet Java einen Punkt. Nachdem es aber ein println(Point p)
gibt, wird println(Object o) aufgerufen und dort irgendwann
String.valueOf(o) (lt. Eclipse). Nachdem jetzt bei getValue() etwas
zurückkommt, dass eine toString() Methode hat funktioniert das ...
[...]
Hier erwartet Java einen String. Nachdem und ruft dementsprechend
println(String s) auf. Jetzt kommt aber kein String sondern ein Date
daher => ClassCastException.
Stimmt genau und laesst sich so im Bytecode nachvollziehen.
Post by Malte Schirmacher
Tut ihr wohl, denn die Generics existieren NUR und ausschließlich in den
Sourcen und übertragen sich nicht in das Kompilat. Dort steht überall wo
auf T zugegriffen wird nur Object, somit kann eure Interpretation nicht
stimmen, oder irre ich mich?
Doch, sie uebertragen sich in Form von generierten Casts ins Kompilat.
Fuer println(Object) ist aus Compilersicht keiner erforderlich, fuer
println(String) aber schon.

Viele Gruesse,
Patrick
Malte Schirmacher
2006-02-17 14:32:21 UTC
Permalink
Post by Patrick Roemer
Doch, sie uebertragen sich in Form von generierten Casts ins Kompilat.
Fuer println(Object) ist aus Compilersicht keiner erforderlich, fuer
println(String) aber schon.
Stimmt, habe gerade nur an die parametrisierte Klasse gedacht :)
Post by Patrick Roemer
Viele Gruesse,
Patrick
--
MfG
Malte Schirmacher
Wanja Gayk
2006-02-17 14:38:28 UTC
Permalink
Post by Burkhard Hassel
Hallo da draußen,
ich habe eine Frage bezüglich Generics. Und zwar habe ich die übliche Box,
eine Art Container, für parametrisierte Datentypen. Dazu mache ich im
Hauptprogramm dann spezifische Boxen für Objekte wie Points, Fische und
Strings. Auf diese referenziere ich eine Raw Type Box, stecke was falsches
rein und hole es wieder raus und drucke sie.
Meine Frage: Wieso bekomme ich eine ClassCastException NUR bei der
String-Box?
public static void main(String[] args) {
Box <Point> poibox = new Box<Point>();
Box <Fisch> fisbox = new Box<Fisch>();
Box <String> strbox = new Box<String>();
Box objectBox;
// Date in die Point-Box (geht)
objectBox = poibox;
objectBox.setValue( new Date());
Erstens: Die Referenz "objectBox" ist nicht typisiert, also wird bei
objectBox.setValue auch nicht gemeckert.
Post by Burkhard Hassel
// Date in die String-Box: Class Cast Exception beim Rausholen
System.out.println();
objectBox = strbox;
objectBox.setValue( new Date());
System.out.println(objectBox .getValue() ); //geht
// System.out.println(strbox.getValue() ); //ClassCastException
Reine Mutmaßung:

bei:
System.out.println(objectBox.getValue());
ist kein Cast für
objectBox.getValue()
nötig, denn es gibt:
System.out#println(Object o);
und diese Signatur passt exakt.

bei:
System.out.println(poibox.getValue());
ist kein Cast nötig, denn es gibt:
System.out#println(Object o);
Und keine passendere Signatur in System.out

Aber bei:
System.out.println(strbox.getValue());
gibt es neben der Signatur:
System.out#println(Object o);
die passendere Signatur:
System.out#println(String s);
und da die strbox ja angibt String liefern zu wollen, wird diese
Signatur bevorzugtz, es wird entsprechend versucht auf String zu casten
und dabei knallt's dann.

Das hier:
System.out.println((Object)strbox.getValue());
sollte schätzungsweise keine ClassCastException liefern.
Probier's mal aus.

Gruß,
-Wanja-
--
"Gewisse Schriftsteller sagen von ihren Werken immer: 'Mein Buch, mein
Kommentar, meine Geschichte'. [..] Es wäre besser, wenn sie sagten:
'unser Buch, unser Kommentar, unsere Geschichte'; wenn man bedenkt, dass
das Gute darin mehr von anderen ist als von ihnen." [Blaise Pascal]
Paul Ebermann
2006-02-17 14:56:26 UTC
Permalink
Post by Burkhard Hassel
Hallo da draußen,
ich habe eine Frage bezüglich Generics. Und zwar habe ich die übliche Box,
eine Art Container, für parametrisierte Datentypen. Dazu mache ich im
Hauptprogramm dann spezifische Boxen für Objekte wie Points, Fische und
Strings. Auf diese referenziere ich eine Raw Type Box, stecke was falsches
rein und hole es wieder raus und drucke sie.
Meine Frage: Wieso bekomme ich eine ClassCastException NUR bei der
String-Box?
Das wichtigste: Die Box-Objekte wissen zur Laufzeit nicht,
welchen Parametertyp sie haben - das weiß nur der Compiler
(oder glaubt zu wissen, wenn du ihn betrügst).
Post by Burkhard Hassel
///////////////////////// erste Datei: Box.java ///////// [...]
/////////////////////////// Zweite Datei: BoxenCasting.java ////////////
import java.awt.Point;
import java.util.Date;
class BoxenCasting {
public static void main(String[] args) {
Box <Point> poibox = new Box<Point>();
Box <Fisch> fisbox = new Box<Fisch>();
Box <String> strbox = new Box<String>();
Box objectBox;
// Date in die Point-Box (geht)
objectBox = poibox;
objectBox.setValue( new Date());
In eine Box vom "Raw Type" kannst du alles
reinstecken - der Parametertyp wird sozusagen
auf Object gesetzt (aber nicht ganz).
Post by Burkhard Hassel
System.out.println(objectBox.getValue() );
Das heißt, beim rausholen vermutet der Compiler
ein Object, und das stimmt ja auch - kein Problem.
Post by Burkhard Hassel
System.out.println(poibox.getValue() );
Hmm. Das ist eher unklar:
Vermutlich meint der Compiler, das sowieso
die Methode mit Object-Parameter aufgerufen
wird, und spart sich daher zwischendurch die
Überprüfung, ob das wirklich ein Point ist.
Post by Burkhard Hassel
// Point in die Fisch-Box (geht)
System.out.println();
objectBox = fisbox;
objectBox.setValue( new Point (12, 4));
System.out.println(objectBox.getValue() );
System.out.println(fisbox.getValue());
OK, genauso wie eben.
Post by Burkhard Hassel
// Date in die String-Box: Class Cast Exception beim Rausholen
System.out.println();
objectBox = strbox;
objectBox.setValue( new Date());
System.out.println(objectBox .getValue() ); //geht
Ja, siehe oben - Object passt noch.
Post by Burkhard Hassel
// System.out.println(strbox.getValue() ); //ClassCastException
Hier ist die Begründung, dass es mehrere println()-
Methoden gibt - eine mit String-Parameter, eine mit
Object (und noch ein paar andere, die hier keine
Rolle spielen).

In der strbox soll angeblich ein String sein - also
kann PrintStream#println(String)
aufgerufen werden. Dazu muss aber erst einmal überprüft
werden, ob das wirklich ein String ist - und das geht
schief.


Derartige "Verzögerte Typfehleraufdeckung" (bzw.
überhauptnicht-Aufdeckung, wie in den ersten Beispielen)
ist einer der Hauptkritikpunkte an den Java-Generics.
Das ist angeblich der Abwärtskompatibilität geschuldet.

Wenn du zur Laufzeit überprüfen willst, ob alles passt,
kannst du Class-Objekte übergeben und dann deren
#cast()-Methode aufrufen - ähnlich wie bei den
Collections.checkedXXX()-Wrappern.


Paul
--
Nun ludigxas: : ()
Michael Hüttermann
2006-02-17 16:40:55 UTC
Permalink
Post by Paul Ebermann
Derartige "Verzögerte Typfehleraufdeckung" (bzw.
überhauptnicht-Aufdeckung, wie in den ersten Beispielen)
ist einer der Hauptkritikpunkte an den Java-Generics.
Das ist angeblich der Abwärtskompatibilität geschuldet.
also man kann es auch übertreiben. wer aliasing betreibt und sich die
objekte irgendwo in untypisierte Typen reinsteckt ist selbst schuld.
Post by Paul Ebermann
Wenn du zur Laufzeit überprüfen willst, ob alles passt,
kannst du Class-Objekte übergeben und dann deren
#cast()-Methode aufrufen - ähnlich wie bei den
Collections.checkedXXX()-Wrappern.
oder einfach mal genau hingucken was man so macht. :-)

Michael
Burkhard Hassel
2006-02-17 22:04:59 UTC
Permalink
Am 17.02.2006, 17:40 Uhr, schrieb Michael Hüttermann""
Post by Michael Hüttermann
also man kann es auch übertreiben. wer aliasing betreibt und sich die
objekte irgendwo in untypisierte Typen reinsteckt ist selbst schuld.
Hallo, alle!

Da waren ja einige gute Gedanken dabei, aber verstehen tu ich es immer
noch nicht. Eigentlich ist es ja auch kein richtiges Problem im üblichen
Sinn, denn im Allgemeinen geht es in dieser Newsgroup darum wie man etwas
am Besten macht. Und das wäre in dem Fall einfach, es zu lassen durch ein
z.B. "objectBox = poibox;" die schönen Generics einfach zu untergraben.
Wäre aber 'ne schöne Frage für'n Zertifizierungs-Test.


Ich möchte noch mal klarstellen, dass ich mich zuerst nicht gewundert
habe, dass es zu der ClassCastException in der strbox kommt, sondern nur,
dass es nicht auch bei den anderen Klassen dazu kommt.

Da bin ich mittlerweile aber wenigstens da ein bisschen schlauer.
Es kommt bei ALLEN diesen Boxen zu einer ClassCastException, wenn man
schreibt:


objectBox = poibox;
objectBox.setValue( new Date());
System.out.println(poibox.getValue() ); // geht
---> Point p = (Point) poibox .getValue(); // c c e

Der Kompiler akzeptiert die letzte Zeile auch ohne explizites Casting.

Bei diesen Boxen hat man in der objectBox (Raw Type von Box<T>) wegen der
zweiten Zeile so was:

Object (ohneNamen) = new Date();

Und das kann nicht auf einen Point gecastet werden.
Gedruckt werden kann es aber, denn in dem println wird die toString()
Methode von - in diesem Fall - Klasse Date aufgerufen. Nicht von Object
wegen dynamischen Bindens. Und es wird ja auch ein Datum ausgegeben.

So weit so gut, aber bei der Stringbox muss aber schon in der Print-Zeile
was schief laufen.

Es steckt da aber auch ein Object (ohneNamen) = new Date();
in der stringbox. Also müsste jetzt eigentlich auch die toString Methode
von Date aufgerufen werden - wird sie aber nicht.
Warum?

Ist es vielleicht so, dass bei
System.out.println (strbox.getValue() );
vielleicht ERST versucht wird, die toString Methode von String aufgerufen
wird, weil ja sowieso ein String erwartet wird, bevor nachgekuckt wird, ob
es überhaupt ein String ist?

Bei toString der Klasse String bekommt man nur ein this zurück:
class String { ...
public String toString() {
return this;
}
Und das wäre dann im Fall
Object (ohneNamen2) = new Date();
der falsche Typ zum Drucken.

Die beiden hier verhalten sich ja auch unterschiedlich:
System.out.println(objectBox.getValue() ); // geht
System.out.println(strbox.getValue() ); // c.c.e

Oben wird sofort über dyn. Binden die toString Methode von Date aufgerufen.

Wird vielleicht unten - weil ein String erwartet wird - gleich versucht
das Ding als String zu drucken? Aber warum dann Class Cast Exception und
nicht Illegal Argument Exception oder so was?


Schon seltsam.

Bu.
Patrick Roemer
2006-02-17 22:58:31 UTC
Permalink
Post by Burkhard Hassel
Wird vielleicht unten - weil ein String erwartet wird - gleich versucht
das Ding als String zu drucken? Aber warum dann Class Cast Exception und
nicht Illegal Argument Exception oder so was?
Weil vom Compiler ein Cast eingefuegt wird, der fehlschlaegt.

| objectBox = poibox;
| objectBox.setValue( new Date());
| System.out.println(poibox.getValue());

Entspricht:

Point p=(Point)poibox.getValue();
System.out.println(p); // println(Object)

Nun 'sieht' der Compiler, dass println() fuer ein Argument vom Typ Point
sowieso nach println(Object) aufgeloest wird. Der Cast ist also
'unnoetig' und wird weggelassen.

| objectBox = strbox;
| objectBox.setValue( new Date());
| System.out.println(strbox.getValue());

Entspricht:

String s=(String)strbox.getValue();
System.out.println(s); // println(String)

Hier ist die speziellste anwendbare Methode println(String). Damit die
verwendet werden kann, muss aber vorher gecastet werden, weil getValue()
(auf Bytecodeebene) 'nur' ein unspezifisches Object liefern kann, also
wird der checkcast vom Compiler generiert.

Viele Gruesse,
Patrick
Burkhard Hassel
2006-02-18 12:14:54 UTC
Permalink
Hi,

da habe ich dank Patrick Roemer die Antwort noch am selben Tag bekommen,
wenn auch knapp

:)





Am 17.02.2006, 23:58 Uhr, schrieb Patrick Roemer <***@t-online.de>:
=====
Post by Patrick Roemer
Weil vom Compiler ein Cast eingefuegt wird, der fehlschlaegt.
| objectBox = poibox;
| objectBox.setValue( new Date());
| System.out.println(poibox.getValue());
Point p=(Point)poibox.getValue();
System.out.println(p); // println(Object)
Nun 'sieht' der Compiler, dass println() fuer ein Argument vom Typ Point
sowieso nach println(Object) aufgeloest wird. Der Cast ist also
'unnoetig' und wird weggelassen.
Ok, verstanden, der Cast, etwas langatmig geschrieben:
Point (ohneNamen) = (Point) poibox .getValue(/* ~ Object o = new Date()
*/);
der fehlschlagen WÜRDE wird nicht durchgeführt.

Aber ich glaube es wird doch ein Casting durchgeführt, allerdings eins das
geht:
Objekt (ohneNamen) = (Object) poibox .getValue(/* ~ Object o = new
Date() */);
Post by Patrick Roemer
| objectBox = strbox;
| objectBox.setValue( new Date());
| System.out.println(strbox.getValue());
String s=(String)strbox.getValue();
System.out.println(s); // println(String)
Hier ist die speziellste anwendbare Methode println(String). Damit die
verwendet werden kann, muss aber vorher gecastet werden, weil getValue()
(auf Bytecodeebene) 'nur' ein unspezifisches Object liefern kann, also
wird der checkcast vom Compiler generiert.
Viele Gruesse,
Patrick
Der Cast der fehlschlägt sollte ungefähr so aussehen:
String (ohneNamen) s = (String) strbox. getValue(/* ~ Object o = new
Date() */);
--> ClassCastException


Mit der seltsamen Schreibweise /* ~ Object o = new Date() */ im
parameterlosen getValue() meine ich, dass der Typ der mit dem return
empfangen wird vom Typ Object ist, aber eigentlich ein verkapptes Date,
wie er mit
Object o = new Date();
erzeugt werden könnte.



Also, ich fand's schon ein bischen knifflig.

Viele Grüße,

Bu.
Patrick Roemer
2006-02-18 12:29:35 UTC
Permalink
Post by Burkhard Hassel
Point (ohneNamen) = (Point) poibox .getValue(/* ~ Object o = new Date()
*/);
der fehlschlagen WÜRDE wird nicht durchgeführt.
Aber ich glaube es wird doch ein Casting durchgeführt, allerdings eins das
Objekt (ohneNamen) = (Object) poibox .getValue(/* ~ Object o = new
Date() */);
Nein. Warum auch? Ein Cast auf Object waere sinnfrei.

Schau Dir doch einfach mal den generierten Bytecode mit 'javap -c' an.

Viele Gruesse,
Patrick
Burkhard Hassel
2006-02-18 16:42:46 UTC
Permalink
Post by Patrick Roemer
Post by Burkhard Hassel
Aber ich glaube es wird doch ein Casting durchgeführt, allerdings eins
Objekt (ohneNamen) = (Object) poibox .getValue(/* ~ Object o = new
Date() */);
Nein. Warum auch? Ein Cast auf Object waere sinnfrei.
Schau Dir doch einfach mal den generierten Bytecode mit 'javap -c' an.
Viele Gruesse,
Patrick
Du hast bestimmt recht, ein Cast wäre Unsinn. Aber das mit dem Bytecode
anschauen ... Da muss ich noch ein bischen lernen ...

Grüßle,

Bu.
Stefan Waldmann
2006-02-20 08:35:21 UTC
Permalink
Post by Burkhard Hassel
Post by Patrick Roemer
Schau Dir doch einfach mal den generierten Bytecode mit 'javap -c' an.
Du hast bestimmt recht, ein Cast wäre Unsinn. Aber das mit dem Bytecode
anschauen ... Da muss ich noch ein bischen lernen ...
Oder du dekompilierst deine .class-Files wieder (z.B. mit jad) und
schaust dir das Resultat an. Auch so wirst du sehen, dass die
Parametrisierung verschwunden ist.


Gruß
Stefan
Helge Ernst
2006-02-20 07:39:05 UTC
Permalink
Hallo,

wenn du mit -Xlint:unchecked (oder nur mit -Xlint) kompilierst, dann
solltest du bzgl. deines Beispielcodes einige UncheckedWarnings erhalten.

mfg

Helge
Burkhard Hassel
2006-02-20 21:34:08 UTC
Permalink
Post by Karl Wiggisser
Hallo,
wenn du mit -Xlint:unchecked (oder nur mit -Xlint) kompilierst, dann
solltest du bzgl. deines Beispielcodes einige UncheckedWarnings erhalten.
mfg
Helge
Ja, die bekomme ich mit Eclipse ja auch. Lauter gelbe Ausrufezeichen. Ich
habe ja geschrieben, dass kein normaler Mensch solchen Code schreibt.

Grüßle,
Bu.

Lesen Sie weiter auf narkive:
Loading...