На случай, если кому-то интересно, есть простое решение:
public List<List<Double>> toUnmodifiable(List<List<Double>> nestedList) {
List<List<Double>> listWithUnmodifiableLists = new ArrayList<>();
for (List<Double> list : nestedList) {
listWithUnmodifiableLists
.add(Collections.unmodifiableList(list));
}
return Collections.unmodifiableList(listWithUnmodifiableLists);
}
Это может использоваться, например, как решение, если вы хотите предоставить список с помощью метода getList (), вы можете вернуть: toUnmodifiable (mNestedList), где mNestedList - закрытый список в классе.
Я лично нашел это полезным при реализации класса, используемого для синтаксического анализа с GSON в Android, поскольку нет смысла иметь возможность изменять ответ, в данном случае десериализованный json, я использовал этот метод как способ раскрыть список с помощью геттера и убедиться, что список не будет изменен.