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;


但是,我想阅读其他课程,比如说Class2Class3,现在我正在复制粘贴代码,只是将所有“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 - 将类传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

Python: 通过引用将类成员项传递给它的一个成员函数。

将类对象实例作为参数从 main() 传递给另一个类对象实例

Excel VBA - 将类方法的名称传递给另一个子例程以调用该方法

如何将类类型作为函数参数传递

在类构造函数中将此指针传递给 CreateThread 在线程过程中表现得很奇怪

javascript在函数调用上传递类索引