簡體   English   中英

Java List.set()更改列表大小。 為什么?

[英]Java List.set() changing list size. Why?

我正在編寫android應用,可在1個圖中繪制4個圖形。 圖形數據存儲在對象GraphViewData(x,y)中。 我也有包含4個GraphVieData對象的List。

我想讓用戶能夠關閉/打開某些圖形。

我試圖先編寫myList.set(index,null)來隱藏圖形,然后再編寫myList.set(index,myObject)以再次顯示它,但是每次List大小都在變化時。 所以我得到IndexOutOfBound異常。

請告訴我為什么列表大小正在更改? 這是List.set()的描述:

用指定的對象替換此List中指定位置的元素。 此操作不會更改列表的大小。

碼:

public void removeSerie(int id){
    graphSeries.set(id, null);
    Log.d("CurrentListSize: ", graphSeries.size() + "");
}
public void addSerie(GraphViewData series, int id){
    graphSeries.set(id, series);
}

JavaAndroid之間的List.set(int, T)的javadocs之間存在差異。 這令人擔心,但是您應該按以下方式解決它:

  • Javadoc的Oracle版本是Java的權威版本。 List實現允許在設置時更改列表大小。

  • 不應將Javadoc的Android版本視為Java的源不正確 您可能會爭辯說這對Android來說是正確的,但是如果您處理的不是專門為Android編寫的代碼,那實際上沒有幫助。 (例如,為Java編寫然后為Android編譯的代碼。)

  • Java和Android中的標准List類不會執行此操作。 (請確保檢查源代碼,但是如果其中任何一個都沒有javadocs這么說,我將感到非常驚訝。)

  • 一個自定義/第三方List可以做到這一點,並且仍然遵循Java List合同(盡管可以說不是Android合同)。

  • 不能保證自定義/第三方List類將遵循這兩個合同。 除非您可以說服相關作者/供應商更改相關列表類,否則這將使整個論據毫無意義。 (祝您好運,因為它可能會破壞其他人的代碼!!)


那你該怎么辦? 我建議:

  • 如果希望使用set可以做到這一點,請確保使用支持它的列表類。 如有必要,請檢查列表類的代碼。

  • 否則,請更改算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM