0
我正在嘗試從現有的ArrayList
中獲取新的ArrayList
並更新新列表中的字段。但它也在舊名單中得到更新。ImmutableList在更新引用列表時得到更新
我曾嘗試下面的代碼:
absoluteEntitlements = findAbsoluteEntitlements(ImmutableList.copyOf(tenantEntitlements), everyoneEntitlements, "global");
private List<Entitlement> findAbsoluteEntitlements(ImmutableList<Entitlement> primaryEntitlements,
List<Entitlement> secondaryEntitlements, String accessType) {
List<Entitlement> absoluteEntitlements = new ArrayList<Entitlement>(primaryEntitlements);
for (int i = 0; i < primaryEntitlements.size(); i++) {
for (int j = 0; j < secondaryEntitlements.size(); j++) {
if (secondaryEntitlements.get(j).equals(primaryEntitlements.get(i))
&& "false".equals(primaryEntitlements.get(i).getAccessType())) {
absoluteEntitlements.get(i).setAccessType(accessType);
}
}
}
return absoluteEntitlements;
}
請提供一個解決方案,我哪裏做錯了。
*「我在哪做錯了」*您認爲不可變列表中的_everything_也是不可變的,但事實並非如此。 ImmutableList只是防止操作列表本身(例如添加或刪除項目)。它不能防止改變包含實例的狀態。或者讓你的Entitlement不可變(並且如果一個字段應該更新,則返回一個新的實例),或者創建一個方法來執行你的tenantEntitlements列表的深層副本(也就是說,它也複製列表中的Entitlement項) 。 – Tom