[英]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.