Как передать класс-обертку Integer методу в Java? - PullRequest
3 голосов
/ 29 марта 2011

Например в Java:

class A {
    private Integer x = new Integer(0);

    public void setValue(Integer q) {
        q = 20;
    }

    public void callX() {
       setValue(x);        // this does not set x to be 20, which is what i need. Is there a way?
    }
}

Ответы [ 3 ]

9 голосов
/ 29 марта 2011

Вы не можете.

Типы обертки являются неизменяемыми, поэтому они эффективно эмулируют поведение примитивных типов: при выполнении q = 20 вы задаете параметр q, указывающий на новый экземпляр Integer со значением 20, но это не меняет исходный экземпляр, на который ссылается x в вызывающем методе.

8 голосов
/ 29 марта 2011

Вместо этого вы можете использовать AtomicInteger, это изменчиво:

private AtomicInteger x = new AtomicInteger(0);

public void setValue(AtomicInteger q) {
    q.set(20);
}

public void callX() {
    setValue(x);
}
1 голос
/ 29 марта 2011

В Java это поведение будет считаться очень запутанным.как правило, метод set, как setValue, принимает значение и не изменяет свои аргументы.Обычно для получения значения используется метод получения.

КСТАТИ: ИМХО Не используйте обертки, если у вас нет веских причин для этого.

Вместо этого вы можете сделать что-то подобное.

class A {
 public int getValue() {
    return 20;
 }

 public void callX() {
   int x = getValue(); // this sets x to be 20.
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...