编程语言
首页 > 编程语言> > java-如何创建在构造函数中返回给定参数ArrayList的方法?

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

作者:互联网

我已经创建了.dat文件,以使用对象类上的序列化工具保存对象的数组列表.
我有这两个类Member和Style,我想将它们保存到arrayList到.dat文件中,并且所有这些都可以使用.

我创建了一个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将是ArrayList< 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");

标签:generic-programming,arraylist,generics,java
来源: https://codeday.me/bug/20191121/2048182.html