我有一个变量<View>
<Image source={require('./images/test.jpg')} />
<View>
,它是全局定义的,并在构造函数中初始化为public static List<Integer> allBooksIDs
问题在于,当我检查列表allBooksIDs = dbFunctions.getAllBookIDs();
的大小时,值为28,但是当我检查allBooks
方法返回的列表的大小时 - 它的57.有什么我做错了吗?
getAllBookIDs()
dbFunctions.getAllBookIDs()
更新
所以,问题解决了,但我不明白为什么变量正在更新。我有一个将全局变量的值赋给另一个变量public List<Integer> getAllBookIDs(){
List<Book> allBooks = getAllBooks();
List<Integer> res = new ArrayList<>();
for (Book b : allBooks){
res.add(b.getId());
}
return res;
}
private List<Book> getAllBooks() {
Query query = manager.createQuery("from books");
return query.getResultList();
}
的方法,之后变量正在更新。我只是找到了:
List<Integer> nonRatedBooks = allBooksIDs
任何人都可以解释,为什么会这样?所以我将来也不会做同样的失败。
答案 0 :(得分:4)
getAllBookIDs()
中有一个名为allBooks
的变量,因此此方法返回的List
将是内部定义的allBooks
,而不是全局定义的allBooks
1}}对象。
答案 1 :(得分:0)
它是掩码和初始化变量allBooks
的组合。第一步是使用
allBooks
constructor{
allBooks = dbFunctions.getAllBookIDs(); // returns a list
}
此时它的大小正确,但稍后如果添加更多Book
,则不再更新静态allBooks
字段,这是因为屏蔽{{1}内的变量名称1}}方法。
getAllBookIDs