public void findWord(String word) {
wordsOnBoard = new ArrayList<String>();
if (dictionary.contains(word)) {
System.out.println(word);
wordsOnBoard.add(word);
} else {
System.out.println("None found");
}
System.out.println(wordsOnBoard);
}
wordsOnBoard是一个全局ArrayList
当dictionary.contains(word)打印出单词,然后将其添加到wordsOnBoard,但是当它离开if循环时,单词不再出现在ArrayList wordsOnBoard中。我该如何解决这个问题?
答案 0 :(得分:2)
每次输入方法时,您都会创建一个新的ArrayList
。
然后你向它添加一些东西(有时候),一旦你离开这个方法,该对象就有资格获得GC。
如果你想保留它,你应该把ArrayList
放到班级的一个字段中。
答案 1 :(得分:0)
你没有归还List
,我建议你试试
// pass in your List reference, and then it won't go out of scope.
public void findWord(List<String> wordsOnBoard, String word) {
if (dictionary.contains(word)) {
System.out.println(word);
wordsOnBoard.add(word);
} else {
System.out.println("None found");
}
System.out.println(wordsOnBoard);
}
或者,您可以在班级中wordsOnBoard
成为一个字段。
答案 2 :(得分:0)
删除此行: wordsOnBoard = new ArrayList();
从函数并将其放在实际定义全局变量的位置。
当你的函数进入范围时,这个wordsOnBoard将获得一个本地ArrayList,其生命周期仅限于函数本身的生命周期。一旦函数退出,垃圾收集将销毁该对象。