... it's what Guava does for ImmutableList etc. and I think it works quite well.