1

はserialise.binを想定し、言葉に満ちているファイルであり、私が「serialise.bin」ファイルをdeserialiseし、コンテンツを格納することができるようにしたいファイルをデシリアライズし、コンテンツをArrayList <String>に格納します。 (Java)の

public static ArrayList<String> deserialise(){ 
    ArrayList<String> words= new ArrayList<String>(); 
    File serial = new File("serialise.bin"); 
    try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))){ 
     System.out.println(in.readObject()); //prints out the content 
    //I want to store the content in to an ArrayList<String> 
    }catch(Exception e){ 
     e.getMessage(); 
    } 
return words; 
} 

シリアライズさArrayListにあったときArrayListのin.readObject()Objectを返し、wordsに割り当てないよう、ArrayList<String>にキャスト

+0

あなたの質問がありますか?あなたのコードに問題はありますか? – shmosel

+0

'ArrayList'を返さないでください。代わりに 'List'を返して、' deserialise'の呼び出し側はその実装の詳細に依存しません。 –

答えて

0

中:

@SuppressWarnings("unchecked") 
public static ArrayList<String> deserialise() { 

    // Do not create a new ArrayList, you get 
    // it from "readObject()", otherwise you just 
    // overwrite it. 
    ArrayList<String> words = null; 
    File serial = new File("serialise.bin"); 

    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))) { 
     // Cast from "Object" to "ArrayList<String>", mandatory 
     words = (ArrayList<String>) in.readObject(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

    return words; 
} 

注釈@SuppressWarnings("unchecked")を追加して型安全警告を抑制することができます。それはObjectgenericタイプにキャストしなければならないために発生します。 Javaのの消去タイプでは、キャストが実行時に型保証されていれば、コンパイラを知る方法がありません。 Hereはこれに関する別の投稿です。さらにe.getMessage();は何もしません。それを印刷するか、代わりにe.printStackTrace();を使用してください。

+0

助けてくれてありがとう、それは動作しますが、 "@SuppressWarnings(" unchecked ")"を追加する必要があります。私はこれが何であるか分かりませんが、一度追加されると、 "型の安全性:オブジェクトからArrayListへのキャストなしのキャスト" –

+0

警告が表示されなくなりました。答えを更新しました。 – thatguy

+0

@SupressWarnings( "unchecked")良いコードですか?この場合、私は別の方法を考えることができるので、私はそれを保持します。 –

関連する問題