Man kommt da nicht drumherum, die Annotation @SuppressWarnings("unchecked") zu verwenden, um den Cast ohne Warnhinweis durchzuführen.
Allerdings sollte man sich schon vergewissern, dass im Vektor korrekte Daten stehen, bevor man den Cast ausführt. Ansonsten kann es zu einem Absturz kommen.
Meine Lösung würde folgendermaßen aussehen:
Code (Java):
import java.io.FileInputStream ;
import java.io.FileNotFoundException ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.ObjectInputStream ;
import java.io.ObjectOutputStream ;
import java.io.StreamCorruptedException ;
import java.util.Vector ;
public class Test {
private static
void saveData( Vector<?> data, String filename) throws IOException
, FileNotFoundException
{
FileOutputStream fos = new FileOutputStream ( filename) ;
ObjectOutputStream oos = new ObjectOutputStream ( fos) ;
oos.writeObject ( data) ;
oos.close ( ) ;
}
private static
Vector<?> readData( String filename) throws IOException
, FileNotFoundException
, ClassNotFoundException
, StreamCorruptedException
{
FileInputStream fis = new FileInputStream ( "t.tmp" ) ;
ObjectInputStream ois = new ObjectInputStream ( fis) ;
return ( Vector<?> ) ois.readObject ( ) ;
}
private static
boolean hasStrings( Vector<?> vector)
{
return vector.get ( 0) .getClass ( ) .toString ( ) .equals ( new String ( ) .getClass ( ) .toString ( ) ) ;
}
@SuppressWarnings( "unchecked" )
private static
Vector< String> convertData( Vector<?> v1)
{
return ( Vector< String> ) v1.clone ( ) ;
}
public static
void main( String [ ] args)
{
Vector< String> bands = new Vector< String> ( ) ;
Vector< String> bands2 = new Vector< String> ( ) ;
Vector<?> temp = null ;
String filename = "t.tmp" ;
bands.add ( "1" ) ;
bands.add ( "2" ) ;
// Daten werden in die Datei gespeichert
try
{
saveData( bands, filename) ;
}
catch ( Exception e)
{
System .out .println ( "Fehler beim Schreiben der Datei: " + e.getLocalizedMessage ( ) ) ;
}
// Daten werden aus der Datei gelesen
try
{
temp = readData( filename) ;
}
catch ( Exception e)
{
System .out .println ( "Fehler beim Lesen der Datei: " + e.getLocalizedMessage ( ) ) ;
}
// Daten werden auf Richtigkeit geprüft
if ( ( temp != null ) && ! temp.isEmpty ( ) && hasStrings( temp) )
{
// Daten werden in bands2 gespeichert
bands2 = convertData( temp) ;
}
else
{
System .out .println ( "Es konnten keine Datensätze gelesen werden." ) ;
}
System .out .println ( "Daten in bands2: " + bands2.toString ( ) ) ;
}
}
Das Fragezeichen, bei Vector<?> temp = null; ist ein Wildcard und bedeutet, dass dies ein Vector, mit einem unbekannten Typ als Element, ist.