Java - 将类传递给函数
Posted
技术标签:
【中文标题】Java - 将类传递给函数【英文标题】:Java - Passing a class to a function 【发布时间】:2022-01-22 15:16:59 【问题描述】:我正在实现序列化,并试图使一切尽可能模块化。从文件中读取对象时,我试图只使用一个函数将所有内容传递给 ArrayList 或类似的东西。目前我正在做这样的事情:
public static ArrayList<Class1> ReadClass1(String fileName)
ArrayList p = null;
try
ObjectInputStream in = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(fileName)));
p = new ArrayList<Class1>();
while (1 != 2)
p.add((Class1) in.readObject());
catch (Exception e)
;
return p;
但是,我想阅读其他课程,比如说Class2
或Class3
,现在我正在复制粘贴代码,只是将所有“Class1”的内容编辑为“Class2”。有没有办法像这样传递我想使用的特定类型?
public static ArrayList<myClass> ReadProducts(String fileName, myClass) //where myClass is a class
ArrayList p = null;
try
ObjectInputStream in = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(fileName)));
p = new ArrayList<myClass>();
while (1 != 2)
p.add((myClass) in.readObject());
catch (Exception e)
;
return p;
这样我就可以将函数重用于不同的类?
【问题讨论】:
你不妨写while(true)
。通过不必每次都执行实际的1 != 2
评估,至少节省了一个 CPU 周期。这看起来可能会导致无限循环,当没有更多对象可供读取时,该循环会被破坏,从而导致您捕获的异常。这不是一个好方法。您可能最终会因任何异常而退出,并且您将不知道出了什么问题。
【参考方案1】:
您可以使用 java Generics。请在下面找到代码:
public static <T> ArrayList<T> ReadProducts(String fileName, Class<T> t)
ArrayList p = null;
try
ObjectInputStream in = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(fileName)));
p = new ArrayList<T>();
while (1 != 2)
p.add(t.cast(in.readObject()));
catch (Exception e)
;
return p;
【讨论】:
以上是关于Java - 将类传递给函数的主要内容,如果未能解决你的问题,请参考以下文章
将类对象实例作为参数从 main() 传递给另一个类对象实例
Excel VBA - 将类方法的名称传递给另一个子例程以调用该方法