2016-04-13 11 views
0

現在、私はファイルから "Variable"型のArrayListsを保存し読み込むことができるプログラムを持っています。しかし、私は別のオブジェクト( "Variables"、 "Functions"などの異なるクラスのインスタンス)を1つのファイルから保存してロードできるようにしたいと考えています。複数のArrayListをJavaの1つのファイルに保存/読み込み

public SaveState(){ 
    ObjectOutputStream out = null; 
    try { 
     out = new ObjectOutputStream(new FileOutputStream("vars.stt")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    ArrayList<Variables> vars = new ArrayList<>(); 
    vars.add(new Variables("g", 5)); 
    vars.add(new Variables("f", -3.12)); 
    try { 
     out.writeObject(vars); 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

public LoadState(){ 
    ObjectInputStream in = null; 
    try { 
     in = new ObjectInputStream(new FileInputStream("vars.stt")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     //final Object o = in.readObject(); 
     final ArrayList<Variables> vars = (ArrayList<Variables>) in.readObject(); 
     System.out.println(vars.toString()); 
    } catch (IOException | ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

このコードは、私だけがファイルから一つのオブジェクトタイプをロードすることができます:ここで私が今持っているコードです。この方法で複数のオブジェクトタイプを保存/ロードする方法はありますか?

+0

関数と変数の基本クラスを作成し、基本クラス型の配列リストを使用しようとしませんでしたか? –

+0

@ImeshaSudasingha正直なところ私はそれができるのかどうか分からないので、たくさんのコード(数百行)をリファクタリングする必要があります。別の解決策がありますか? – Arman

+0

いいえ、基本クラス(「ProgramElement」など)を作成することができます。コードをリファクタリングする必要はありません。 –

答えて

1

varaibleまたは関数のarraylistsをconatainingマップを使用することができます。マップはパフォーマンス面でも優れています。

Map<String, List> map = new HashMap<String, List>(); 
    map.put("variable", arralist1); 
    map.put("functions", arralist2); 
    map.put("list", arralist3); 
+0

これは、ArrayListsの型が異なる場合でも動作しますか? – Arman

+0

はい。あるいは、ジェネリックを使ってパラメータ化することもできます。 – KayV

+0

このソリューションをありがとうございます。それは完全に働いた – Arman

2

は、このようなクラス階層を作成します。

//base class. No need to write any content 
class ProgramElement { 

} 

//your variables class 
class Variables extends ProgramElement { 
    //your code 
} 

//your functions class 
class Functions extends ProgramElement { 
    //your code 
} 

//your lists class 
class Lists extends ProgramElement { 
    //your code 
} 

は、次に型ProgramElementのArrayListのを使用しています。 リストはListsクラスではありません。これは、Javaのリストインターフェイスです。

List<ProgramElement> elements = new ArrayList<>(); 
elements.add(aFunction); //add function object 
elements.add(aList); //lists object 
elements.add(aVariable); //variables object 

注:あなたはObject型の一覧を使用して同じことを達成することができます。しかし、それは良い習慣ではないので推奨されません。

+0

ありがとう、最初は、 "ProgramElementクラスは変数、関数、リストを拡張しています"という行に沿って何かをするように指示していると思っていました。ありがとうございました。 – Arman

関連する問題