2014-12-05 59 views
3

我創建了.dat文件來保存我的對象類上使用implements Serializable的對象的數組列表。 我有這兩類會員風格,我想將它們保存到ArrayList中的成.dat文件,我已經得到了這一切的工作..如何創建在構造函數中返回給定參數ArrayList的方法?

我創建了一個READDATA類需要一個fileLocation作爲參數。再有這些方法

public boolean load() { 
public boolean save() { 
public ArrayList<Member> getMembers(){ 
public boolean add(Object [] member) { 

Load方法只需要一切從.dat文件,並把它放入數組列表 和保存方法只是保存ArrayList中。像這樣的:(只是一些嘗試捕捉也;))

/* load Method */ 
FileInputStream fileIn = new FileInputStream(fileLocation); 
ObjectInputStream in = new ObjectInputStream(fileIn); 
this.objects = (ArrayList<Member>) in.readObject(); // <-- That Member needs to be generic also.. 

/* save Method */ 
File yourFile = new File(fileLocation); 
yourFile.createNewFile(); 
fileOut = new FileOutputStream(fileLocation, false); 
out = new ObjectOutputStream(fileOut); 
out.writeObject(objects); 

,而不是每次都創建一個新的類,我在考慮做與一切工作的通用類。所以我可以使用它是這樣的:

ReadData membersFile = new ReadData("members.dat", new Member()); 
ReadData stylesFile = new ReadData("styles.dat", new Style()); 

所以不知我的數組列表中READDATA類將ArrayList<Member>在會員對象從參數來和ArrayList<Style>時,它的風格。

有人可以幫助我做到這一點?或者幫助我以其他方式實現這一目標?

回答

3

你是如此接近得到這個權利。以下是通用的相關代碼。不幸的是,java序列化的對象不能識別類型,所以你需要繼續對象。

public <T> ArrayList<T> ReadData(String filename, T type) { 
    ..... 
    this.objects = (ArrayList<T>) in.readObject(); 
    ..... 
} 

如果您想了解更多關於泛型編程,甲骨文已經寫了堅實的tutorial會告訴你的基礎知識。

除了更改您的類的方法簽名外,您還需要使該類具有通用性。

public class ReadDataMembers<T> { 
    public ReadDataMember(String filename) { 

    } 
} 

你不需要通過構造類型通過,但你可以用下面的語法

ReadDataMembers rdm = new ReadDataMembers<Member>("member.dat"); 
+0

我並沒有真正得到這個工作:/我的滿級是在這裏:[PasteBin](http://pastebin.com/1zWfUWqy)最重要的部分是我可以使用getMembers(我將它重命名爲getObjects),它會返回一個與列表中的對象類型相同的數組列表構造函數。 – Jeggy 2014-12-05 17:16:13

+0

我已經得到它的工作,但它不會返回正確的對象類型,我已經寫了一點點在這個文件的頂部:[PasteBin](http://pastebin.com/3g6pUpcy) – Jeggy 2014-12-05 17:42:38

+1

代碼在pastebin頂部的註釋中沒有用類型初始化ReadDataMember類。使用「新的ReadDataMembers (」member.dat「);」作爲構造函數。您也可以從方法簽名中刪除。我認爲我們正在制定一個通用的方法,但不是一個通用的類。 – 2014-12-05 17:49:33

相關問題