Re[16]: передача параметра "по ссылке"
От: aka50 Россия  
Дата: 21.12.06 09:54
Оценка:
Здравствуйте, fellow.sufferer, Вы писали:

FS>Здравствуйте, aka50, Вы писали:


A>>Правильное слово будет "изменил", и тогда становится понятно что

A>>есть "примитивный" указатель... он в кавычках, т.к. что int, что
A>>ссылка передаются по значению...

FS>Ну так чем же "примитивный" указатель отличается от указателя?


В том, что (ну и например при ==) ведет себя как
любой примитивный тип (примерно как int).
Re[15]: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 09:54
Оценка:
Тебе не проще в спеке поискать ответ?
Или те прост ов кайф вопросы задавать?
Re[7]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 09:57
Оценка:
Здравствуйте, dev_m, Вы писали:

_>Я так понимаю я не понял самой сути проблемы. Читая посты у меня сложилось впечатление что мое желание вообще с точки зрения java неправильно. Если так, то не могли бы вы мне объяснить почему...

Вот именно. Прочтите сообщение Re[6]: передача параметра "по ссылке"
Автор: rsn81
Дата: 21.12.06
(там ссылка есть полезная) и сообщение Re[10]: передача параметра "по ссылке"
Автор: Michael Ponomarev
Дата: 21.12.06
.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[17]: передача параметра "по ссылке"
От: fellow.sufferer Россия  
Дата: 21.12.06 09:57
Оценка:
Здравствуйте, aka50, Вы писали:

FS>>Ну так чем же "примитивный" указатель отличается от указателя?


A>В том, что (ну и например при ==) ведет себя как

A>любой примитивный тип (примерно как int).

То есть "примитивный" указатель ведёт себя как int, а указатель как кто себя ведёт?)))
Re[2]: передача параметра "по ссылке"
От: Trean Беларусь http://axamit.com/
Дата: 21.12.06 10:00
Оценка: +4
Здравствуйте, Тычеблин, Вы писали:

Т>Здравствуйте, dev_m, Вы писали:


_>>Как в java сделать так, чтобы измененный в функции параметр, вернулся в основную программу.

_>>В сях:
_>>
_>>void set(int&n);
_>>

_>> , а как в jave?

Т>это к стати то — чего ужас как нехватает в JAVA...

Т>это первое — что нужно было добавить в язык.

Это неудобство проявляется в основном при математических вычислениях, при попытке использования процедурного подхода в Java (через статические методы к примеру). Не помню, чтобы мне это где-то еще могло пригодиться, но я особо по этому поводу не расстраивался.
Re[12]: передача параметра "по ссылке"
От: Michael Ponomarev Россия  
Дата: 21.12.06 10:03
Оценка:
Hi, fellow.sufferer!

fs> Раз тебе не важно, чо ты паришь-то меня?


Я тебя не "парю".
это все слова Эккеля.

WBR, Michael Ponomarev.
Posted via RSDN NNTP Server 2.0
Re[7]: передача параметра "по ссылке"
От: aka50 Россия  
Дата: 21.12.06 10:05
Оценка:
Здравствуйте, dev_m, Вы писали:

А>>Обворачивай в объект и вперёд. Или ретурнь результат. Это уж от как красифше по задаче будет )

_>Return не покатит, так как возвращаемый параметр не один, ну разве хоть массив несвязаных параметров возвращай.
Не понял... ведь если ты передаешь ссылку на объект, внутри функции ты этот объект можешь менять (
блин, чего вот в жаве нет, так это старого доброго const )
Если ты оперируешь примитивными типами... тут действительно overhead, ибо придется извращаться...

_>Я тут привел код, который написал прямо в ответнике, чтобы иллюстрировать свою проблему — не знание, как получить объект/обычную переменную из функции(чем я раньше регулярно пользовался в с++), кроме как через return. Насчет того, что n должно быть полем класса — ну, в данный момент я хочу изменять и получать состояния вообще другого класса...

А почему у другого класса не сделать пропертю типа getMySuperState1, getMySuperState2? Есть большая вероятность inline jit-ом,
что уберет вызовы функции вообще?

_>Я так понимаю я не понял самой сути проблемы. Читая посты у меня сложилось впечатление что мое желание вообще с точки зрения java неправильно. Если так, то не могли бы вы мне объяснить почему...


В java все есть объект, и нужно привыкнуть к тому, что все простые операции типа =, == оперируют над простыми типами
и ссылками на объекты (т.е. new Integer(1) != new Integer(1), т.к. это два разных объекта, правильно
new Integer(1).equals(new Integer(1)).

По этому если тебе страсть как надо передать объект для модификации придется либо поступить
правильно, т.е. вернуть новое значение (n = someFunction(n)) либо обернуть это дело в объект
(типа класса Test выше), либо изспользовать массив (изврат) int [] = new int[1] = {1};
Re[18]: передача параметра "по ссылке"
От: aka50 Россия  
Дата: 21.12.06 10:09
Оценка:
Здравствуйте, fellow.sufferer, Вы писали:

FS>Здравствуйте, aka50, Вы писали:


FS>>>Ну так чем же "примитивный" указатель отличается от указателя?


A>>В том, что (ну и например при ==) ведет себя как

A>>любой примитивный тип (примерно как int).

FS>То есть "примитивный" указатель ведёт себя как int, а указатель как кто себя ведёт?)))


"Поздравляю Шарик — ты балбес" (с) Матроскин

примитивный... ну если тебе легче, есть еще weak .
Re: передача параметра "по ссылке"
От: dshe  
Дата: 21.12.06 10:11
Оценка:
Здравствуйте, dev_m, Вы писали:

_>Как в java сделать так, чтобы измененный в функции параметр, вернулся в основную программу.

_>В сях:
_>
_>void set(int&n);
_>

_> , а как в jave?

Сошлюсь на себя Re: Pass Integer by reference
Автор: dshe
Дата: 23.12.05


Добавлю еще один вариант: в jakarta commons-lang есть Mutable типы Class MutableInt. Можно использовать их.
--
Дмитро
Re[3]: передача параметра "по ссылке"
От: Тычеблин Китай  
Дата: 21.12.06 10:14
Оценка:
Здравствуйте, Trean, Вы писали:


T>Это неудобство проявляется в основном при математических вычислениях, при попытке использования процедурного подхода в Java (через статические методы к примеру). Не помню, чтобы мне это где-то еще могло пригодиться, но я особо по этому поводу не расстраивался.


до момента переписывания кода под C# я тоже особенно — то и не перживал относясь к этой проблемме как к явлению природы...

если аквариумных рыбок вылить в пруд они еще долго будут плавать в периметре уже отсутствующего аквариума...

так и я, начав переписывать код, некоторое время, делал это в стиле JAVA ...
прозрение наступило позже...
одним словом, это нужно реально ощутить на практике.
уверяю, контраст разительный.
и дело не только в примитивах. считаю возможность передавать ЛЮБЫЕ переменные byref важнее и полезне чем дженерики.
Re[19]: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 10:15
Оценка: +2
Здравствуйте, aka50, Вы писали:

A>примитивный... ну если тебе легче, есть еще weak .


А ты можешь просто ответить на вопрос, который сам же и вызвал введением новых терминов?
Как же себя ведет при сравнении (==) "не_примитивный" указатель, если "примитивный" ведет себя как int?
Re[8]: передача параметра "по ссылке"
От: Trean Беларусь http://axamit.com/
Дата: 21.12.06 10:15
Оценка:
Здравствуйте, aka50, Вы писали:

A>Здравствуйте, dev_m, Вы писали:


А>>>Обворачивай в объект и вперёд. Или ретурнь результат. Это уж от как красифше по задаче будет )

_>>Return не покатит, так как возвращаемый параметр не один, ну разве хоть массив несвязаных параметров возвращай.
A>Не понял... ведь если ты передаешь ссылку на объект, внутри функции ты этот объект можешь менять (
A>блин, чего вот в жаве нет, так это старого доброго const )

А в чем проблема сделать интерфейс только с get методами, типа:
MyInterface {

Object getValue();

}

MyImpl implements MyInterface {

Object getValue() {...}

setValue(Object obj)

}

...
method(MyInterface obj) {

...

}


Конечно, это не 100% защита, но вполне хватает, чтобы избежать случайных изменений объекта. Или вообще сделать immutable.
Re[19]: передача параметра "по ссылке"
От: Blazkowicz Россия  
Дата: 21.12.06 10:20
Оценка:
Здравствуйте, aka50, Вы писали:

A>"Поздравляю Шарик — ты балбес" (с) Матроскин

Зарываешься.

A>примитивный... ну если тебе легче, есть еще weak .

Ок. Есть Weak, Soft, Strong, Phantom. "Примитивный" это какой?
Re[7]: передача параметра "по ссылке"
От: Тычеблин Китай  
Дата: 21.12.06 10:21
Оценка:
Здравствуйте, rsn81, Вы писали:


R>В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему.


откуда такое определение?

скажу мягко...это утверждение несоответствует действительности
Re[13]: передача параметра "по ссылке"
От: Blazkowicz Россия  
Дата: 21.12.06 10:21
Оценка:
Здравствуйте, Michael Ponomarev, Вы писали:

MP>Я тебя не "парю".

MP>это все слова Эккеля.

Во избежание подобных недоразумений цитаты рекомендуется оформлять как цитаты.
Re[4]: передача параметра "по ссылке"
От: Blazkowicz Россия  
Дата: 21.12.06 10:23
Оценка: +1
Здравствуйте, Тычеблин, Вы писали:

Т>считаю возможность передавать ЛЮБЫЕ переменные byref важнее и полезне чем дженерики.


Аргументов кроме "я попробовал — мне понравилось", мы пока не слышали.
Re[4]: передача параметра "по ссылке"
От: Trean Беларусь http://axamit.com/
Дата: 21.12.06 10:25
Оценка: +2
Здравствуйте, Тычеблин, Вы писали:

Т>Здравствуйте, Trean, Вы писали:



T>>Это неудобство проявляется в основном при математических вычислениях, при попытке использования процедурного подхода в Java (через статические методы к примеру). Не помню, чтобы мне это где-то еще могло пригодиться, но я особо по этому поводу не расстраивался.


Т>до момента переписывания кода под C# я тоже особенно — то и не перживал относясь к этой проблемме как к явлению природы...


Т>если аквариумных рыбок вылить в пруд они еще долго будут плавать в периметре уже отсутствующего аквариума...


Я на C/C++ писал в открытом море, и когда, если следовать вашей аналогии меня засунули в аквариум, я даже не расстроился потери int& или int*.

Т>так и я, начав переписывать код, некоторое время, делал это в стиле JAVA ...

Т>прозрение наступило позже...
Т>одним словом, это нужно реально ощутить на практике.
Т>уверяю, контраст разительный.
Т>и дело не только в примитивах. считаю возможность передавать ЛЮБЫЕ переменные byref важнее и полезне чем дженерики.

Гм, позвольте, а где в java проблема с передачей изменяемых в методе объектов? Это только к примитивам относится, или вы хотите чтобы еще и значение передаваемой ссылки на объект можно было менять? Так это такие баги в программе будут, что лучше сразу выпить яду. Буду рад если вы приведете кусочек кода, после которого у меня наступит прозрение чтобы понять, что я теряю сейчас.
Re[7]: передача параметра "по ссылке"
От: msqrt84 Россия  
Дата: 21.12.06 10:30
Оценка: +1
Здравствуйте, dev_m, Вы писали:

А>>Обворачивай в объект и вперёд. Или ретурнь результат. Это уж от как красифше по задаче будет )

_>Return не покатит, так как возвращаемый параметр не один, ну разве хоть массив несвязаных параметров возвращай.

_>Как его в объект обернуть, так чтобы помогло я не понял. У меня пример с Integer тоже не работает.

_>Насчет обсуждений о правильности с точки зрения ООП, обсуждаемой ниже.
_>Я тут привел код, который написал прямо в ответнике, чтобы иллюстрировать свою проблему — не знание, как получить объект/обычную переменную из функции(чем я раньше регулярно пользовался в с++), кроме как через return. Насчет того, что n должно быть полем класса — ну, в данный момент я хочу изменять и получать состояния вообще другого класса...
_>Да, горячая получилось темка, совсем не ожидал....
_>Я так понимаю я не понял самой сути проблемы. Читая посты у меня сложилось впечатление что мое желание вообще с точки зрения java неправильно. Если так, то не могли бы вы мне объяснить почему...

Тут уже так много объясняли, что я даже боюсь начинать!


Если очень хочется можно создать свой класс обёртку (чтоб и в Java 1.4 и 1.5 прокатило, в 1.5 работает точно ):

public class MyIntWrapper
{
    private int intTypeField;

    public MyIntWrapper() {}

    public MyIntWrapper(int intTypeParam)
    {
        this.intTypeField = intTypeParam;
    }

    public void setInt(int intTypeParam)
    {
        this.intTypeField = intTypeParam;
    }

    public int getInt()
    {
        return this.intTypeField;
    }
}



public class Test1
{
    public static void change(MyIntWrapper n)
    {
        n.setInt(5);
    }

    public static void main(String[] args)
    {
        MyIntWrapper n = new MyIntWrapper();
        System.out.println(n.getInt());
        change(n);
        System.out.println(n.getInt());
    }
}
Re[2]: передача параметра "по ссылке"
От: Тычеблин Китай  
Дата: 21.12.06 10:36
Оценка: +1
Здравствуйте, dshe, Вы писали:


D>Сошлюсь на себя Re: Pass Integer by reference
Автор: dshe
Дата: 23.12.05


D>Добавлю еще один вариант: в jakarta commons-lang есть Mutable типы Class MutableInt. Можно использовать их.


можно, верно. а для чего такие страдания? берем в руки C# и смотрим насколько все оказываца может проще и понятнее.

не нужно плодить разнообразные холдеры — откровенно загаживающие код при программировании и просаживающие производительность, и отъедающие память при инстанционировании в рантайме.


было бы понятно если бы добавление возможности передачи параметров byref было бы чем либо невероятно сложным, но в C# сделали ведь.

прошу обратить внимание, что передачи параметров byref дает возможность изменять не только внешние примитивные типы но и ССЫЛОЧНЫЕ.
Re[8]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 10:45
Оценка:
Здравствуйте, Тычеблин, Вы писали:

Т> откуда такое определение?

Re[6]: передача параметра "по ссылке"
Автор: rsn81
Дата: 21.12.06
(ссылка в сообщении)

Т>скажу мягко...это утверждение несоответствует действительности

Скажу твердо: RTFM! В рамках ООП — соответствует. Конечно, если вы пишете процедурно, то...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.