Como criar uma coleção profunda e não modificável?

Costumo tornar um campo de coleção inalterável antes de retorná-lo a partir de um método getter:

private List<X> _xs;
....
List<X> getXs(){
  return Collections.unmodifiableList(_xs);
}

Mas não consigo pensar em uma maneira conveniente de fazer isso se o X acima for uma lista:

private List<List<Y>> _yLists;
.....
List<List<Y>> getYLists() {
  return Collections.unmodifiableList(_yLists);
}

O problema acima é claro que, embora o cliente não possa modificar a Lista de listas, ele pode adicionar / excluir objetos Y das listas incorporadas.

Alguma ideia?

questionAnswers(6)

yourAnswerToTheQuestion