今天差點被一段代碼給陷阱了。
1 List<BidDO> bidDOs=result.getBids();
2 List<AuctionBid> abids = new ArrayList<AuctionBid>();
3 AuctionBid abid = new AuctionBid();
4 for(BidDO bid : bidDOs){
5 abid = this.translate(bid);//把bidDO轉成AuctionBid
6 abids.add(abid);
7 }
8
debug的時候才發現abids里面的值都是同一個,而且是最后add進去的那個abid值。原來是我add進去的abid都是對同一個對象的引用,每次重新賦值都會把原有的值給覆蓋掉了,才導致錯誤的結果。
這個問題其實是挺簡單的,就是沒有注意變量的作用域.因為abid變量的作用域是全局的,是對對象AuctionBid的一個引用,所以在for循環中對abid的不同賦值,其實都是對AuctionBid對象產生了影響,因為你使用的是同一個引用(指針)。
解決的話把AuctionBid abid = new AuctionBid()這句在for循環中聲明即可。