Есть ли способ добиться чего-то похожего на константу C++ в Java? В частности, у меня есть функция типа
Код: Выделить всё
private static Vector2 sum(Vector2 vec1, Vector2 vec2) {
return vec1.cpy().add(vec2);
}
и я хочу
- пояснить в подписи, что он не изменяет свои аргументы,
и
- обеспечить, чтобы он не изменял свои аргументы (желательно во время компиляции, но вставка утверждений времени выполнения также подойдет).
Теперь я знаю, что Java строго передает по ссылке (я просто дразнюсь, я знаю, что это передача по значению или, скорее, передача по ссылке конечно). Я имею в виду, что в Java, когда вы вызываете метод, ссылка копируется, но эта ссылка указывает на одно и то же содержимое объекта. Если класс имеет общедоступные поля или сеттеры, вызываемый метод всегда может изменить содержимое переданного объекта. Есть ли какие-нибудь, например? аннотация типа @NotNull или инструмент для предотвращения этого? Я только что нашел аннотации JetBrains, такие как @Contract(pure = true), но не думаю, что они обеспечивают какую-либо проверку.
Подробнее здесь:
https://stackoverflow.com/questions/413 ... ts-in-java