1

このメソッドを呼び出して、シリアル化されたオブジェクトを取得したい:

ArrayList<String> myArrayList = (ArrayList<String>) getSerializedObject(ArrayList.class, "arraylist.ser");

指定したファイル (arraylist.ser) が存在しない場合、または渡したクラスと一致しない場合は、そのクラスの新しいインスタンスを返したいと考えています。

private Object getSerializedObject(Class<?> c, String filename) {
    Object serObject = null;

        try {
            if (new File(filename).exists()) {
                ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
                Object tempObj = in.readObject();
                if (tempObj.getClass().equals(c)) {
                    System.out.println("Loading "+filename);
                    serObject = tempObj;
                }
                in.close();
            }
        }
        catch (FileNotFoundException e) { e.printStackTrace(); }
        catch (IOException e) { e.printStackTrace(); }
        catch (ClassNotFoundException e) { e.printStackTrace(); }

        if (serObject != null) {
            return serObject;
        }
        else {
            // return new instance of Class c here
        }
}
4

3 に答える 3

2

リフレクションを使用すると、クラスの新しいインスタンスを作成できます。パッケージを紹介しますが、すでにClassクラスを使用しています。

もちろん、デフォルトのコンストラクターが存在しない場合は、何らかの方法で適切なコンストラクターを選択する必要があります。

于 2013-05-17T01:04:29.150 に答える