Я родом из С++, и сейчас я изучаю Java. Один вопрос возник, когда я попытался использовать некоторые сторонние библиотеки. Как определить, вызывает ли вызов метода, ссылающегося на объектную ссылку, как параметр, изменяет объект? В С++ это понятно благодаря использованию ключевого слова const. Если сигнатура метода:
void foo(Boo& boo);
Я знаю, что ссылочный объект может быть изменен, а если подпись метода:
void foo(const Boo& boo);
Компилятор гарантирует, что ссылочный объект не будет изменен.
Я не видел ничего похожего на Java, поскольку только сама ссылка может быть объявлена окончательной, а не ссылочным объектом, а окончательный аргумент не имеет большого смысла в первую очередь, поскольку он все равно передается значением. Поэтому, когда я вижу такой метод, как:
void foo(Boo boo) {...}
Как определить, изменен ли объект, на который ссылается boo внутри тела функции (возможно, используя аннотации)? Если нет способа узнать, существует ли какая-то широко используемая конвенция или некоторые лучшие практики, чтобы избежать путаницы и ошибок?