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

Тема в разделе "Java", создана пользователем skysun, 15 мар 2010.

  1. skysun

    skysun Гость

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


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

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    есть. примерно для этого интерфейсы и придумали. высносишь все методы не изменящие состание в интерфейс и пусть код который не должен модицировать работает именно с с этим интерфесом. аналогичного результата можно добится с помощью наследования: базовый класс реализует методы не измеющие состояние, дочерний - методы изменющие
     
  3. skysun

    skysun Гость

    Да но это не 100% защита. Приведение типов и все на смарку.
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    а зачем 100% защита? этим способом однозначно определяется контракт использования класса. кто ему не следует тот сам себе злой буратина.
     
  5. skysun

    skysun Гость

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

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

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

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

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

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

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Проблема с приведением конечно устраняется, но возможность похачить через рефлексию отстается. А если задаться целью можно еще несколько методов придумать. Агрегировать объект конечно вариант, но по моему оно того не стоит.

    Добавлено: еще как вариант можно оборачивать объект в http://java.sun.com/j2se/1.3/docs/guide/re...tion/proxy.html, который при вызове set* методов будет кидать исключение.
     
Загрузка...
Похожие Темы - Передача объекта функцию
  1. AvasKvas
    Ответов:
    1
    Просмотров:
    5.101
  2. Corexis
    Ответов:
    0
    Просмотров:
    69
  3. Shouldercannon
    Ответов:
    0
    Просмотров:
    487
  4. Shouldercannon
    Ответов:
    0
    Просмотров:
    387
  5. 123456789igor
    Ответов:
    0
    Просмотров:
    807

Поделиться этой страницей