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