Avatar billede andreas Nybegynder
03. januar 2007 - 15:34 Der er 14 kommentarer og
1 løsning

Type cast warning?

Hejsa,

Når jeg typecaster med:

ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
map = (HashMap<String, Double>) in.readObject();
in.close();

Får jeg følgende warning:

Type safety: The cast from Object to HashMap<String,Double> is actually checking against the  erased type HashMap

Kan man "komme af" med den warning?.

Jeg prøver på at gemme mit hashmap i en fil ved at Serialize det først, og så Deserialize det når jeg indlæser det igen.
Avatar billede windcape Praktikant
03. januar 2007 - 15:37 #1
http://forum.java.sun.com/thread.jspa?threadID=789844&tstart=30

Beskriver nogenlunde samme problem som dit :-)
Avatar billede andreas Nybegynder
03. januar 2007 - 15:42 #2
Ja har godt set det, men det kan da ikke passe man ikke kan få fjernet den warning?
Avatar billede windcape Praktikant
03. januar 2007 - 15:47 #3
Det er jo bare en warning, dit program virker jo stadig. Så vidt jeg kan se så er det bare en undtagelse i generics som gør at du netop får en warning i dette tilfælde.
Avatar billede andreas Nybegynder
03. januar 2007 - 16:01 #4
Jo men pointen i mit spørgsmål er ikke om programmet virker eller ej, men at jeg gerne vil af med den warning, så jeg ingen har.
Avatar billede kalp Novice
03. januar 2007 - 16:33 #5
Er dit hashmap oprettet sådan her

HashMap<String, Double> xxx = new HashMap<String, Double>();


men om ikke andet så ved jeg ikke om du kan komme af med den warning uden at slette

<String, Double>
Avatar billede andreas Nybegynder
03. januar 2007 - 16:35 #6
kalp: jeps

Man kan vel altid fjerne det med @SuppressWarnings("unchecked") - men det jo lidt en "skidt" løsning.
Avatar billede kalp Novice
03. januar 2007 - 16:38 #7
hvis man kan hive det ud sådan her (hvilket jeg tvivler)
så ville du måske slippe for den warning... men om ikke andet så er det en logisk warning.. readObject returnere et object.. og det kan være hvad som helst jo så det er ikke særlig typesafe

ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Object tmp = (Object)in.readObject();
map = (HashMap<String, Double>)tmp;
in.close();
Avatar billede andreas Nybegynder
03. januar 2007 - 16:59 #8
Det kan vel som sådan så være et fedt, hvilken warning man så har?
Avatar billede kalp Novice
03. januar 2007 - 21:41 #9
undskyld... forstod dig ikke helt lige der??
Avatar billede andreas Nybegynder
04. januar 2007 - 01:08 #10
Jo ser du, dit eksempel giver stadig samme warning?
Avatar billede arne_v Ekspert
04. januar 2007 - 04:23 #11
problemet kan ikke løses på en elegant måde med den implementation af generics
der er lavet i Java og med det som den warning checker
Avatar billede kalp Novice
04. januar 2007 - 09:47 #12
andreas >> ja tænkte jeg også;)

men det skal siges at jeg har testet i JDev.. og der synes jeg ikke at der kom nogle warnings ved at jeg gjorde dette

HashMap<String,Film> map = new HashMap<String,Film>();

FileOutputStream out = new FileOutputStream("database.dat");        ObjectOutputStream obout = new ObjectOutputStream(out);
obout.writeObject(map);
obout.close();

FileInputStream in = new FileInputStream("database.dat"); 
ObjectInputStream obout = new ObjectInputStream(in);   
map = (HashMap<String,Film>)obout.readObject()


Film er en egendefineret klasse.
Men måske du bare skulle se på nogle warnings som en mindre oplysning til dig som udvikler:)
Avatar billede andreas Nybegynder
04. januar 2007 - 15:12 #13
Jeg bruger Eclipse, og der kommer warningen godt nok. Men der er jo ikke rigtig noget at gøre ved det, hvis man ikke på en "elegent" måde kan komme af med den, så må jeg jo leve med den hehe.
Avatar billede kalp Novice
11. januar 2007 - 13:38 #14
Måske kan man godt slippe for den warning via. -nowarn

http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javac.html
Avatar billede andreas Nybegynder
09. januar 2008 - 20:09 #15
Det var ik muligt at komme af med den.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester