Мой коллега упоминает, почему мы используем RESTeasy для нашего текущего проекта в УСПОКОИТЕЛЬНЫЕ веб-сервисы в EE Java с RESTeasy (JAX-RS) :
Его ссылочная реализация, Джерси, не была выбрана, потому что мы испытали затруднения при интеграции его хорошо с EJB3 и Швом 2.0.
Мы используем реализацию RESTeasy JAX-RS, потому что мы не испытали никаких затруднений при интеграции его с нашим EJBs и Швом. Это также имеет достаточную документацию.
от Apache существует другая реализация, но я, haven’t попробовал его, потому что это использует более старую версию JAX-RS
Наконец, существую еще одна платформа для УСПОКОИТЕЛЬНЫХ веб-сервисов для Java под названием Restlet, но мы не одобрили его, потому что во время этой записи, это использует пользовательскую архитектуру, даже при том, что надлежащая поддержка JAX-RS находится в работах.
Нет, Java не может сделай это. Java передается только по значению. Он также передает ссылки по значению.
Передача по ссылке - это концепция, которую разработчики Java часто неправильно понимают, вероятно, потому, что они не могут этого сделать. Прочтите это:
Самое близкое, что вы можете сделать, - это передать AtomicReference. Это может быть изменено вызывающим абонентом. Это довольно некрасиво, но ИМХО должно быть. Менять аргумент в методе - плохая идея.
Да, как вы отметили, Java передает ссылки по значению. Это хорошая тема для интервью для Java-программистов, большинство из которых, кажется, ошибаются.
С точки зрения C # Я могу пройти ссылочный тип по значению или по ссылка, это также верно для значения types
В C # относительно ошибочно говорить «передавать ссылочный тип по значению».
Вы не можете передать ссылочный тип по значению - вы можете передать ссылку на объект или ссылку на ссылку . В java вы не можете передавать ссылку на ссылку.
Однако ваше noddie-приложение делает различие немного более ясным.
Технически, как мы знаем, переменные, которые ссылаются на объекты, являются строго указателями на объект. При передаче объекта в качестве параметра методу указатель или ссылка копируются в переменную параметра. Java называет это «передачей по значению».
Итак, вы получаете по крайней мере две переменные, которые ссылаются на один и тот же объект. Если вы установите для переменной параметра значение null, другие переменные сохранят свое значение благодаря подсчету ссылок.
Если у вас есть следующий метод:
public void function(Person person) {};
И объект:
Person marcus = new Person();
marcus.name = "Marcus";
Вызов метода следующим образом:
function(marcus);
Вы в основном получаете это в локальной области видимости метода:
Person person = marcus;
Если вы устанавливаете person = null
, это не влияет на значение marcus
. Это связано с подсчетом ссылок.
Однако, если вы сделаете это:
person.name = null;
Это также верно:
marcus.name == null;
У вас есть ссылка на исходный объект в переменной параметра. Изменение переменной параметра влияет на исходный объект. Вы можете делать все, кроме как установить для него значение null, и ожидать, что исходное значение также будет равно null. Подсчет ссылок предотвращает это.