gpt4 book ai didi

java - 如何创建在构造函数中返回给定参数的 ArrayList 的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:59 26 4
gpt4 key购买 nike

我使用 implements Serializable 创建了 .dat 文件来保存对象数组列表在我的对象类上。我有这两个类 MemberStyle,我想将它们保存到 arrayList 到 .dat 文件中,我已经完成了所有这些工作..

我创建了一个 ReadData 类,它将 fileLocation 作为参数。然后有这些方法

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

load 方法只是从 .dat 文件中获取所有内容并将其放入 arraylist保存方法只保存数组列表。像这样:(还有一些 try catch ;))

/* 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>当 Member 对象来自参数和 ArrayList<Style>当它的风格。

有人可以帮我做这件事吗?或者帮助我以其他方式实现这一目标?

最佳答案

您离做对这件事已经很接近了。下面是使这个通用的相关代码。不幸的是,Java 序列化对象不识别类型,因此您仍需要强制转换对象。

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

如果你想了解更多关于泛型编程的知识,oracle 写了一本很扎实的书tutorial这将向您展示基础知识。

除了更改类的方法签名外,您还需要使类通用。

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

}
}

不需要通过构造函数传入类型,但是可以使用下面的语法

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

关于java - 如何创建在构造函数中返回给定参数的 ArrayList 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320705/

26 4 0