传入File作为参数的问题

时间:2018-03-08 12:07:39

标签: java file arraylist

我有一个从我的应用程序类文件ArrayListDVDCollection扩展的类DVDApplicationArrayListDVDCollection类仅使用loadData的方法声明实现接口。在我将运行实际程序的应用程序文件中,我想创建一个能够传递到loadData方法的File对象。但是,它一直给我错误,并声明该方法本身需要是静态的。如何将文件成功传入应用程序文件中的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);
    }
} 

2 个答案:

答案 0 :(得分:0)

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的引用来调用它。

答案 1 :(得分:0)

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

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不是静态的,因此需要一个Instance来调用它上面的方法。

由于你正在使用的父类不访问成员变量,所以另一种方法是使方法在那里静态:

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

然后你可以保持你的主方法不变。

成员变量和方法之间存在很强的联系,这取决于它们的状态,方法是否为静态,并以静态方式和静态上下文调用它们。

在这种情况下,只有关键字没有反映出任何可变状态的独立性。也许这可以通过Java解决,比如没有静态关键字的自动依赖性检查 - 可能会花费很多。当然这是一种记录方式。