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