第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

用它制作一個(gè)新的ArrayList時(shí)如何修改Collections.unmodi?

用它制作一個(gè)新的ArrayList時(shí)如何修改Collections.unmodi?

侃侃爾雅 2021-05-05 17:42:09
我有一個(gè)getter,它返回一個(gè)不可修改的列表,例如:public List<Product> getProductList() {    if (productList == null)        return new ArrayList<>();    return Collections.unmodifiableList(productList);}我這樣稱(chēng)呼這個(gè)吸氣劑:List<Product> productList = new ArrayList<>(report.getProductList());然后,我將此列表傳遞給另一個(gè)修改列表的方法,如下所示:for (Product product : productList) {    product.addToAdvisoryList(advisory);}其中addToAdvisoryList(Advisory advisory)是:public void addToAdvisoryList(Advisory advisory) {    if (advisoryList == null) {        setAdvisoryList(Collections.singletonList(advisory));    } else if (!isContainedAdvisory(advisoryList, advisory)) {        List<Advisory> newAdvisoryList = new ArrayList<>(advisoryList);        newAdvisoryList.add(advisory);        setAdvisoryList(newAdvisoryList);    }}運(yùn)行這些代碼后,原始產(chǎn)品列表將被修改。有人可以解釋到底發(fā)生了什么嗎?以及如何避免修改不可修改的列表?
查看完整描述

2 回答

?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

您的列表包含可變的Product對(duì)象。


您無(wú)需修改任何列表。列表包含對(duì)相同可變對(duì)象的引用,并且您正在對(duì)這些對(duì)象進(jìn)行更改?;旧鲜呛鸵郧耙粯拥睦蠁?wèn)題


為避免這種情況,您可以getProductList返回一份副本列表。另外,您可以使Product類(lèi)不可變,這將迫使您重新考慮您的方法。


public List<Product> getProductList() {

    List<Product> copies = new ArrayList<>();

    for (Product product: productList)

        copies.add(new Product(product)); // add this constructor


    return copies;

}


查看完整回答
反對(duì) 回復(fù) 2021-05-19
  • 2 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)