超类:
public class CwDB{
protected LinkedList<Entry> dict = null;
public CwDB(String filename){
this.dict = new LinkedList<Entry>();
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String w = null;
while((w = br.readLine()) != null ){
String c = br.readLine();
this.add(w,c); //adds new Entry to dict
}
br.close();
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
public void add(String word, String clue){
this.dict.add(new Entry(word,clue));
}
...
}
子类:
public class InteliCwDB extends CwDB {
public InteliCwDB(String filename){
super(filename);
}
}
案例1:
CwDB db = new CwDB("src/cwdb.txt");
案例2:
InteliCwDB idb = new InteliCwDB("src/cwdb.txt");
问题在于案例1完美无缺,但案例2根本没有。 你能告诉我什么是错的吗? (我没有得到任何错误/异常,只有idb的列表为空,当db的列表有ober + 1k元素时...)
答案 0 :(得分:2)
你这么说:
dict
实例中的InteliCwDB
列表为空。如果超类构造函数以某种方式未运行,那么您将拥有一个dict
为null
的实例。
如果抛出了其他一些异常并且未被捕获,那么您将无法检查InteliCwDB
。
所以从表面上看,这只能意味着构造函数正在运行,但它读取的文件是空的。换句话说,你有两个不同的“src / cwdb.txt”文件......在不同的目录中。
其他解释涉及询问您的证据; e.g。
dict
。 (你还没有声明dict
是私人的......)
[更新 - 这是解释:请参阅OP的评论。他在子类中覆盖了add
,这就是bug的所在。 ] 我的建议是重新检查您的流程和证据。如果这没有帮助,那么使用调试器运行应用程序,在构造函数上设置断点,然后单步执行,以便您可以找出真正正在发生的事情。
答案 1 :(得分:0)
为了进行调试,您应该在try-catch中添加catch (Exception e)
。不是IOException
的异常可能会导致您出现问题。所以,试试这样:
public CwDB(String filename){
this.dict = new LinkedList<Entry>();
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String w = null;
while((w = br.readLine()) != null ){
String c = br.readLine();
this.add(w,c); //adds new Entry to dict
}
br.close();
fr.close();
}catch(IOException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}