Передача объекта в функцию

  • Автор темы skysun
  • Дата начала
S

skysun

#1
Народ, всякий раз когда надо передать объект в функцию, сталкиваюсь с проблемкой.
Как избежать модификации объекта внутри функции( ведь фактически передается ссылка).
Я в таких случаях передаю клона объекта.
А есть ли другие способы решить эту проблему?
Интерес у меня теоретический. Интересно , как другие поступают.


Заранее спасибо.
 

Kmet

Java Team
25.05.2006
1 036
8
#2
А есть ли другие способы решить эту проблему?
есть. примерно для этого интерфейсы и придумали. высносишь все методы не изменящие состание в интерфейс и пусть код который не должен модицировать работает именно с с этим интерфесом. аналогичного результата можно добится с помощью наследования: базовый класс реализует методы не измеющие состояние, дочерний - методы изменющие
 
S

skysun

#3
есть. примерно для этого интерфейсы и придумали. высносишь все методы не изменящие состание в интерфейс и пусть код который не должен модицировать работает именно с с этим интерфесом. аналогичного результата можно добится с помощью наследования: базовый класс реализует методы не измеющие состояние, дочерний - методы изменющие
Да но это не 100% защита. Приведение типов и все на смарку.
 
S

skysun

#5
а зачем 100% защита? этим способом однозначно определяется контракт использования класса. кто ему не следует тот сам себе злой буратина.
Мда. С этим согласен. Кроме того получается, что можно поступить примерно так:
Класс В агрегирует класс А и делегирует методы get класса А, тогда получается что можно без опаски передать ссылку на объект класса В
и не опасаться изменения состояния класса А.

Код:
Class A{
set();
get();
}

Class B{
А а;
get(){ a.get()}
}
так что ли?

Проблема с приведение типов устраняется.

Но все равно сложновато. В том смысле, что нада самому ...

P.S. java пытаюсь освоить.
 

Kmet

Java Team
25.05.2006
1 036
8
#6
Проблема с приведением конечно устраняется, но возможность похачить через рефлексию отстается. А если задаться целью можно еще несколько методов придумать. Агрегировать объект конечно вариант, но по моему оно того не стоит.

Добавлено: еще как вариант можно оборачивать объект в http://java.sun.com/j2se/1.3/docs/guide/re...tion/proxy.html, который при вызове set* методов будет кидать исключение.