[英]Ways to signal that API returns an unmodifiable/immutable collection
除了記錄它(顯然它也應該被記錄),使用特殊的返回類型(我擔心將自己限制為ImmutableX)或讓用戶在運行時發現,是否有任何其他方式告訴用戶他們從API獲得的集合的API是不可修改/不可變的?
是否有任何命名約定或標記注釋通用信號相同的東西?
編輯:不可修改和不可變並不意味着相同的事情,但為了這個問題的目的,它們是相似的。 這個問題基本歸結為讓用戶知道返回的對象沒有完全遵守它的契約(即一些常見的操作會引發運行時異常)。
不是一般的命名約定,但您可能對使用此@Immutable
注釋感興趣: http : @Immutable
除了文檔目的,此機制還將驗證您的對象是否真的是不可變的(在它期間)實例化)並拋出運行時異常(如果不是)。
好的和詳細的解決方案是創建自己的UnmodifiableCollection包裝類,並返回它:
public UnmodifiableCollection giveMeSomeUnmodifableCollection() {
return new UnmodifiableCollection(new LinkedList());
}
返回類型的名稱足以生成關於集合的不可修改性的詳細陳述。
在方法的返回類型上編寫@Immutable
注釋是最好的方法。 它有多種好處:
更重要的是,驗證可以在編譯時進行,然后再運行代碼。
如果要在編譯時進行驗證,可以使用IGJ Immutability Checker 。 它區分了抽象值永遠不會改變的@Immutable
引用,以及無法執行哪些副作用的@ReadOnly
引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.