簡體   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