Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
#1

Передача параметров по ссылке - Программирование Android

28.12.2013, 13:29. Просмотров 733. Ответов 4
Метки нет (Все метки)

Допустим, есть ф-я:
Java
1
2
3
4
int foo()
{
 
}
Хотелось бы чтобы она изменяла значение, передаваемое ей.
Например:
Java
1
2
3
4
5
6
7
8
String typeOfError = "";
 
int foo(typeOfError)
{
//do something
 
typeOfError = "Error while operation abcde";
}
После чего можно было получить уже измененное значение переменной typeOfError.
Я так понял, в Java нет передачи параметров по ссылке. Но может есть удобная замена этому?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 13:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача параметров по ссылке (Программирование Android):

Передача параметров внутрь apk - Программирование Android
Всем привет! Для аналитики установок приложения нужно передавать идентификатор клика внутрь apk. Как я себе это представляю: есть...

Передача параметров с Activity в Fragment - Программирование Android
Здравствуйте! У меня не получается передать параметры с Activity в Fragment. Я пытался сделать это следующим образом: В Activity: ...

Комбинирование программных параметров текста и параметров из layout - Программирование Android
Есть класс, отображающий layout на котором есть элемент TextView. В layout textView имеет вид: <TextView ...

Передача параметров по ссылке - C++
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке? Т.е. вместо void doSomething(const int _count, const...

Передача параметров по ссылке - Python
Доброго! Имеется класс: class Node(object): def __init__(self): self.key = 0 self.left = None ...

Передача параметров по ссылке - C++
У кого есть рабочий вариант сего чуда ? (К примеру,функции квадратного корня).В учебнике не работает.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ASDFD12
39 / 39 / 6
Регистрация: 15.09.2012
Сообщений: 449
28.12.2013, 13:56 #2
String - это ссылочный тип Java, соответстевенно передается ссылка и в твоем случае все должно работать
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
28.12.2013, 14:04  [ТС] #3
Цитата Сообщение от ASDFD12 Посмотреть сообщение
String - это ссылочный тип Java, соответстевенно передается ссылка и в твоем случае все должно работать
Точно. Объекты передаются по ссылке. А значит не только строки, но и перечисления передаются по ссылке.
Уже легче ).
angryrobot
Командир зеленых роботов
347 / 284 / 53
Регистрация: 08.10.2013
Сообщений: 564
28.12.2013, 18:28 #4
Цитата Сообщение от Slon747 Посмотреть сообщение
Я так понял, в Java нет передачи параметров по ссылке. Но может есть удобная замена этому?
Именно так. В метод можно передать ссылку на объект и потом внутри метода делать любые манипуляции с объектом на который эта ссылка ссылается. Однако, внутри метода вы не сможете сделать так, чтоб ссылка стала указывать на другой объект. Строка в джаве это неизменяемый объект, и когда внутри метода вы попытаетесь присвоить параметру новое значение - оно будет доступно только внутри метода. За пределами метода никаких изменений не произойдет. Следующий код напечатает "1111" в подтверждении моих слов:
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp = "1111";
        foo(tmp);
        System.out.println(tmp);
    }
    static void foo(String str) { 
        str = "2222";
    }
}
Как быть?
1) Использовать StringBuffer вместо String
2) Юзать адский костыль с массивом из одного элемента (не рекомендуется) :
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp[] = {"1111"};
        foo(tmp);
        System.out.println(tmp[0]); // Напечатает 2222
    }
    static void foo(String str[]) { 
        str[0] = "2222";
    }
}
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
29.12.2013, 15:35  [ТС] #5
Цитата Сообщение от angryrobot Посмотреть сообщение
Именно так. В метод можно передать ссылку на объект и потом внутри метода делать любые манипуляции с объектом на который эта ссылка ссылается. Однако, внутри метода вы не сможете сделать так, чтоб ссылка стала указывать на другой объект. Строка в джаве это неизменяемый объект, и когда внутри метода вы попытаетесь присвоить параметру новое значение - оно будет доступно только внутри метода. За пределами метода никаких изменений не произойдет. Следующий код напечатает "1111" в подтверждении моих слов:
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp = "1111";
        foo(tmp);
        System.out.println(tmp);
    }
    static void foo(String str) { 
        str = "2222";
    }
}
Как быть?
1) Использовать StringBuffer вместо String
2) Юзать адский костыль с массивом из одного элемента (не рекомендуется) :
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp[] = {"1111"};
        foo(tmp);
        System.out.println(tmp[0]); // Напечатает 2222
    }
    static void foo(String str[]) { 
        str[0] = "2222";
    }
}
Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 15:35
Привет! Вот еще темы с ответами:

Передача параметров по ссылке - C++
Вот задание: С клавиатуры вводится число, передается в вызываемую функцию, в ней найти сумму делителей и их число. Результат работы...

Передача параметров функции по ссылке в С? - C Linux
Что-то моя не понимать: Хотеть: void a(int &b){ b+=100; } GCC: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token Можно...

Передача параметров в функцию по ссылке - JavaScript
Подскажите пожалуйста, как передать массив в функцию по ссылке? Мне нужно чтобы после вызова функции в переданном массиве изменился порядок...

Передача параметров по константной ссылке - Arduino
struct Color { // Color(byte red=0, byte green=0, byte blue=0) // :red(red),green(green),blue(blue) // { } byte...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.12.2013, 15:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru