Warning "The Cast from Object to"

  • Themenstarter Themenstarter nooooob
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

nooooob

Gast
Habe eine Warning beim Casten von einem Obkject auf ein Treeset...die ich gerne beseitigt haben möchte.
Das Programm funzt aber die warning muss weg!

Code:
               TreeSet<Integer> temp = [u](TreeSet<Integer>)indicatedWords.get(word).get(2);[/u]
			temp.add(startposition);			
			indicatedWords.get(word).set(2, temp);


Waning: "Type safety: The cast from object to TreeSet<Integer> is actually checking against the erased type TreeSet"

Please help
 
Ich glaube, da kannst du die Warnung höchstens unterdrücken, aber nicht den Fehler beseitigen.
Ohne compilierbaren Code kann man nicht viel sagen.
 
@SupressWarnings("unchecked") über die Methode. Vielleicht kann man da auch was drehen, um den Fehler ganz zu beseitigen, aber dafür braucht's mehr Code.

mpG
Tobias
 
Was liefert denn "indicatedWords.get(word).get(2)" zurück?
Vermutlich ist es nur ein Object und dann kann der Compiler nicht prüfen, ob das wirklich ein legitimer Cast ist oder nicht.
Das gleiche passiert auch bei clone(), weil clone() per Definition immer ein Object zurückliefert:

Code:
Vector<String> a = ...; // some intialization
Vector<String> b = (Vector<String>) a.clone(); //warning
 
Ja genau so ist es. Ich versuch ein object auf ne collection zu casten.also gibt es keine andere möglichkeit außer suppress waning???
 
Das wäre auch mein Anliegen, das @supresswarnings möchte ich auch gerne vermeiden, nicht zuletzt weil dann auch alle anderen warnings unterdrückt werden.


Ich habe das Problem beim Deserialisieren:

Code:
// so gibts ein class-cast warning
LinkedList<Person> myemployees = (LinkedList<Person>)objIn.readObject());

// ohne cast im Aufruf des kopierkonstruktors gibts einen Fehler:
LinkedList<Person> myemployees = new LinkedList<Person>(objIn.readObject());

// ohne cast beim Aufruf des kopierkonstruktors bekommt man natürlich wieder das dämlcihe warnign:
LinkedList<Person> myemployees = new LinkedList<Person>((LinkedList<Person>)objIn.readObject());


Gibts denn hier nicht mittlerweile (jdk 6u3) eine "saubere" Lösung?
 
Nein, weil der Compiler nicht sicherstellen kann, dass das gelieferte Objekt tatsächlich vom Typ TreeSet<Integer> ist.
Du könntest allerdings alle betreffenden Objekte Typisieren, also den Returntype von der Methode.

ms
 
Du könntest allerdings alle betreffenden Objekte Typisieren, also den Returntype von der Methode.

Wie kann ich das machen? Die Methode .readObject() ist ja eine Methode des Deserializers und nicht von mir selber geschrieben...?
 
Es geht nicht. Die Methode "readObject" ist nicht als Template-Version ausgelegt und muss ein Object zurückliefern.

Vielleicht kannst Du noch was mit "Vector<?>" erreichen, Du Dich also beim Cast nicht festlegst.

Alternativ würde ich die Templates einfach weglassen und per Hand casten, so wie früher...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben