У меня есть метод List<Foo> getFoos()
, который получает данные с удаленного сервера и возвращает его.Допустимо ли возвращать unmodifiableList или я должен возвращать массив?
Конечно, пользователь не должен изменять количество элементов списка, потому что он будет получать данные, не синхронизированные с данными на сервере (и если он хочет изменить количество элементов, у него есть специальные методы, такие как addFoo()
).
Первый подход состоял в том, чтобы вернуть массив и подменить метод подписи Foo[] getFoos()
. Но он более распространен в java и более удобен для пользователя для работы с коллекциями, поэтому я сменил подпись на List<Foo> getFoos()
. Этот метод всегда возвращает
Collections.unmodifiableList (originalList)
Таким образом, когда пользователь попытается изменить список, он получит RuntimeException.
Есть ли какие-либо рекомендации по дизайну api в подобных случаях?
Я больше забочусь о том, будут ли это путать пользователей и заставить их думать, что они могут изменить список, и все данные синхронизации будут выполняться автоматически (синхронизация с сервером я имею в виду). – Roman
Конечно, после первого RuntimeException все запутанные пользователи, безусловно, поймут, что они не могут сделать это так просто :) – Roman
@Roman В вашей документации вам просто нужно, чтобы возвращался немодифицируемый список. – Poindexter