繁体   English   中英

将文件作为参数传递时出现问题

[英]Issue with passing in a File as a parameter

我有一个从我的应用程序类文件DVDApplication扩展的ArrayListDVDCollection类。 ArrayListDVDCollection类仅使用loadData的方法声明实现接口。 在运行实际程序的应用程序文件内部,我想制作一个File对象,该对象可以传递到loadData方法中。 但是,它不断给我带来错误,并指出该方法本身必须是静态的。 如何将文件成功传递到应用程序文件的loadData方法中?

public class ArrayListDVDCollection implements DVDCollectionInterface
{  
    public ArrayList<DVD> loadData(File dvdData){
        try{
            BufferedReader kbd = new BufferedReader(new FileReader(dvdData)); // Open the DVDCollection file.
            String line;
            while ((line = kbd.readLine()) != null) // Read the contents.
            {
                String dvdTitle = line;
                String dvdCategory = kbd.readLine();
                String dvdRunningTime = kbd.readLine();
                int dvdYear = Integer.parseInt(kbd.readLine());
                double dvdPrice = Double.parseDouble(kbd.readLine());

                DVDArrayList.add(new DVD (dvdTitle, dvdCategory, dvdRunningTime, dvdYear, dvdPrice));
            }
            kbd.close(); // Close file after reading
        }catch (Exception e){
            System.out.println("Error reading file.");
        }
        return DVDArrayList;
    }
}

申请文件

public class DVDApplication extends ArrayListDVDCollection{
    public static void main(String[] args){
        ArrayList<DVD> DVDArrayList = new ArrayList<DVD>();
        File dvdData = new File("DVDCollection.txt");
        DVDArrayList = loadData(dvdData);
    }
} 
public class DVDApplication extends ArrayListDVDCollection{
public static void main(String[] args){
    ArrayList<DVD> DVDArrayList = new ArrayList<DVD>();
    File dvdData = new File("DVDCollection.txt");
    DVDArrayList = new ArrayListDVDCollection ().loadData(dvdData);
}

}

因为loadData是非静态方法,所以您需要通过ArrayListDVDCollection的引用来调用它。

快速而肮脏的解决方案是:

public class DVDApplication extends ArrayListDVDCollection{
    public static void main (String[] args){
        ArrayList<DVD> DVDArrayList = new ArrayList<DVD>();
        File dvdData = new File ("DVDCollection.txt");
        DVDApplication dvdapp = new DVDApplication ();
        DVDArrayList = dvdapp.loadData (dvdData);
    }
} 

由于方法loadData不是静态的,因此需要一个实例来在其上调用该方法。

由于您正在使用的父类不访问成员变量,因此可以采用另一种方法使该方法在此处静态化:

public class ArrayListDVDCollection implements DVDCollectionInterface
{  
    public static ArrayList<DVD> loadData(File dvdData) {

然后,您可以保留主要方法不变。

在具有成员变量和方法(取决于它们的状态)与方法是否静态之间,以及以静态方式和静态上下文调用它们之间,存在紧密的联系。

在这种情况下,只有关键字不能反映与任何可变状态的独立性。 也许用Java可以解决此问题,例如不使用静态关键字的自动依赖项检查-可能会很昂贵。 当然,这是一种记录方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM