|
|
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Вопрос прост - необходимо выполнить процедуры и вернуть набор параметров В частности tbMark,tmMark которые являются полями объекта и созданные внутри процедуры конструктором. Но возврат не происходит, пришлось дополнить ключом и кодом if(Key==0) tmMark=Model; else tmCalc=Model; if(Key==0) tbMark=Table; else tbCalc=Table; Это неверно... Насколько помню передача параметров по значению только для ПРОСТЫХ типов (используем массив если ссылка) остальные типы в Jave передаются ссылке. JTable, TableMark (польз. тип) - не есть простыми, но возврат не происходит Подскажите как реализовать правильно . Заранее благодарен ! CreateTable(0,tbMark,tmMark,rcMark); CreateTable(1,tbCalc,tmCalc,rcCalc); Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2017, 21:52 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что вы похоже не очень понимаете, что в java нет такого понятия, как out параметр (как например в PL/SQL). То что в метод передается значение по ссылке, означает что внутри метода параметр будет ссылаться на тот же объект, на который ссылается аргумент в вызове (ссылка будет скопирована в параметр). Если параметру внутри метода присвоить другое значение, то это никак не повлияет на вызывающий метод, т.к. значение параметра это всего лишь копия переданного аргумента На простом примере: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 01:00 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
HOME_X, https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/mutable/Mutable.html] Interface Mutable<T> - Provides mutable access to a value Class SummaryMutableBoolean A mutable boolean wrapper.MutableByte A mutable byte wrapper.MutableDouble A mutable double wrapper.MutableFloat A mutable float wrapper.MutableInt A mutable int wrapper.MutableLong A mutable long wrapper.MutableObject<T> A mutable Object wrapper.MutableShort A mutable short wrapper. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 06:07 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Usman, Параметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!) Как можно выйти из положения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 13:44 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
HOME_XПараметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!)С этим согласен. (см. ответ Kripke) HOME_XКак можно выйти из положения ? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. вывод: Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 14:05 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
HOME_XUsman, Параметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!) Как можно выйти из положения ? По ссылке они передаются, просто "по ссылке" в широком смысле - через указатель. То есть референсные параметры метода при вызове метода содержат адреса объектов, а не являются ссылками в их определении как именованная часть памяти. Соответственно, при записи меняется только значение самого указателя. Решается это очень просто и много как, например, передачей уже созданных объектов в вызов метода и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 14:09 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Не точно выразился в предыдущем посте, по факту в джава происходит следующее: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но это все-равно передача по ссылке, передача по значению - объект целиком бы копировался, а здесь копируется только указатель на него в локальную переменную метода. Вот так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 15:06 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
HOME_XПараметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!)Для примитивов - это реальное значение, а для ссылочных типов - значением является ссылка, которое мы тоже не можем изменить. Из примера: Код: java 1. мы не можем изменить значение аргумента obj . Но мы можем изменить значение поля, которое определено в классе MutableObject<T> : Код: java 1. 2. что мы и делаем при помощи методов: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 15:08 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Usman, По-моему автору стоит разобраться с основами java и переписать свой код в нормальном виде. А не добавлять в это ад еще и MutableObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 16:09 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Спасибо за пояснения господа Учту в дальнейшей разработке Usman - благодарен за конкретный пример ! P.S. в своем случае изменил сигнатуру класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2017, 18:35 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
HOME_XПараметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!) Вы немного заблуждаетесь. Объект в java это всегда ссылка. Соответственно строите обертку в виде объекта (хоть массива из одного элемента) и вуаля. Правда и вызывающий должен оперировать этим объектом, а не прямой ссылкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2017, 09:26 |
|
||
|
Передача параметров по сслыке и значению
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевHOME_XПараметры в Jave реально передаются только по значению (другие утверждения ложны !!!!!!!) Вы немного заблуждаетесь. Объект в java это всегда ссылка. Соответственно строите обертку в виде объекта (хоть массива из одного элемента) и вуаля. Правда и вызывающий должен оперировать этим объектом, а не прямой ссылкой. Ну в том же PHP можно передать ссылку по ссылке, чтобы заменить ссылку из тела метода. Код: php 1. 2. 3. Но это, мне кажется, не очень хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2017, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39389054&tid=2123231]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 338ms |

| 0 / 0 |
