2017-06-16 38 views
0

我想擺脫clone()方法。如何在java中創建一個只讀數組?

對於以下類聲納(靜態代碼檢查工具)中的溶液抱怨 我不應該直接暴露對象的內部陣列爲一體的可改變方法調用從而改變該對象的狀態後的數組。它建議在返回之前執行該數組的clone(),以便不更改對象的狀態。

下面是我的課...

class DevicePlatformAggregator implements IPlatformListings{ 
     private DevicePlatform[] platforms = null; 

    public DevicePlatform[] getAllPlatforms() throws DevicePlatformNotFoundException { 
     if (null != platforms) { 
      return platforms.clone(); 
     } 
      List<DevicePlatform> platformlist = new ArrayList<DevicePlatform>(); 
      ..... // code that populates platformlist 
      platforms = platformlist.toArray(new DevicePlatform[platformlist.size()]); 
     return platforms; 
    } 
    } 

不過,我不認爲其良好的克隆及其不必要的重複數據。

  1. 沒有什麼類似於Collections.unmodifiableList(),關於陣列

  2. 我不能改變該方法getAllPlatforms的返回類型()到一些

收集,因爲它是一個接口方法

回答

0

我不是一個Java大師,但我非常相信,你這裏運氣不好。除了創建0元素數組之外,沒有辦法使基本數組不可變。

使它final不會導致只有指向它的引用是不可改變的。

正如你已經說獲得一個不可修改的列表要走的路是使用Collections如下面的例子:

List<Integer> contentcannotbemodified= Collections.unmodifiableList(Arrays.asList(13,1,8,6)); 

希望它能幫助。

相關問題