![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| ИванМ |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
У меня такая проблемма.
Если в конструкторе GameCanvas пишу такой код:
то все работает. Но если в этом же самом месте вместо вышеописанного кода вызываю функцию init (этого же класса, GameCanvas):
то не работает. Функция init выглядит так:
Как такое может быть? |
||||||
|
|||||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
Нашел причину. Оказывается в java параметры передаются по значению а не по ссылке. А как передать по ссылке? Нет ключевого слова ref как в C# или наподобии того?
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 1 Всего: 160 |
При этом не надо забывать, что по значению передаётся ссылка (object reference). Если параметр является изменяемым (mutable) объектом, то в теле метода можно изменять состояние. И будет изменяться состояние переданного объекта. То есть создаётся копия ссылки на объект, а не копия объекта. Есть, конечно, и immutable objects - это то, что в других языках относится к примитивным типам (int, double). Они всегда передаются по значению. Так что Ваш пример, теоретически должен работать. Такой вывод из того, что я вижу. P.S. Могу заблуждаться. -------------------- |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
Я прочитал, что вроде можно изменять состояние, но нельзя присваивать объекту новую копию.
Т.е. object.value=n и object.setN(val) будет работать а object = new ... не будет А в моем случае как раз второе. |
|||
|
||||
| kemiisto |
|
||||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 1 Всего: 160 |
Ну да, ну да. Я был невнимателен. Тогда сделайте так - метод должен вернуть ссылку на созданный внутри него экземпляр класса Player:
и вызов соответсвенно (я не особо соображаю в обработке исключений, но я try-catch переместил бы сюда):
P.S. Пишу "на коленках", так что работоспособность не гарантирую. Это сообщение отредактировал(а) kemiisto - 4.2.2009, 00:46 -------------------- |
||||||
|
|||||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
Спасибо. Это тоже выход.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Если нужно передать несколько значений по ссылке, можно сделать так:
Но в данном случае (с одним ref-параметром) лучше код kemiisto. Это сообщение отредактировал(а) math64 - 4.2.2009, 10:53 |
|||
|
||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |