我有一些包含对象日志的文件。每个文件可以存储不同类型的对象,但单个文件是同构的——它只存储单一类型的对象。
我想编写一个方法来返回这些对象的数组,并使该数组具有指定类型(文件中的对象类型是已知的并且可以作为参数传递)。
粗略地说,我想要的是以下内容:
public static <T> T[] parseLog(File log, Class<T> cls) throws Exception {
ArrayList<T> objList = new ArrayList<T>();
FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
try {
Object obj;
while (!((obj = in.readObject()) instanceof EOFObject)) {
T tobj = (T) obj;
objList.add(tobj);
}
} finally {
in.close();
}
return objList.toArray(new T[0]);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不能编译(返回语句有错误,演员表有警告),但它应该让你知道我想要做什么。有关执行此操作的最佳方法的任何建议?
您不能拥有通用数组,因此只需从您的方法中返回 ArrayList:
public static <T> ArrayList<T> parseLog(File log, Class<T> cls) throws Exception {
ArrayList<T> objList = new ArrayList<T>();
FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
try {
Object obj;
while (!((obj = in.readObject()) instanceof EOFObject)) {
T tobj = (T) obj;
objList.add(tobj);
}
} finally {
in.close();
}
return objList;
}
Run Code Online (Sandbox Code Playgroud)
然后,当您知道实际类型时,然后进行转换。因此,假设您知道 T 在某个时候实际上是一个整数,请执行以下操作:
Integer[] array = ((ArrayList<Integer>) myList).toArray(new Integer[myList.size()]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4988 次 |
| 最近记录: |