gpt4 book ai didi

java - 在java中将返回类型作为参数传递?

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

我有一些包含对象日志的文件。每个文件都可以存储不同类型的对象,但单个文件是同类的——它只存储单一类型的对象。

我想编写一个返回这些对象数组的方法,并使该数组具有指定类型(文件中对象的类型是已知的,可以作为参数传递)。

粗略地说,我想要的是如下内容:

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]);
}

上面的代码无法编译(return 语句有错误,强制转换有警告),但它应该让您了解我正在尝试做什么。对执行此操作的最佳方法有何建议?

最佳答案

您不能拥有通用数组,因此只需从您的方法中返回 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;
}

然后,当您知道实际类型时,再进行转换。因此,假设您知道 T 在某个时候实际上是一个整数,请执行以下操作:

Integer[] array = ((ArrayList<Integer>) myList).toArray(new Integer[myList.size()]);

关于java - 在java中将返回类型作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com