我有一个从我的应用程序类文件ArrayListDVDCollection
扩展的类DVDApplication
。 ArrayListDVDCollection
类仅使用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);
}
}
答案 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解决,比如没有静态关键字的自动依赖性检查 - 可能会花费很多。当然这是一种记录方式。