2016-02-29 3 views
-2

У меня есть класс, например:Как использовать AtomicInteger?

public class A{ 
    private final int number; 

    public A(int number){ 
     this.number = number; 
    } 
} 

Quesiton, я хочу, чтобы обновить number время по времени, и я должен сделать объект без гражданства, что означает nubmer должен быть окончательным. Мой друг предложил мне использовать класс AtomicInteger, но я не знаю, как заставить его работать.

+0

'final' сделает недвижимость неизменной. Безгражданство зависит от контекста, то есть от того, что вы делаете с «числом» - вы можете выполнить оппонент с «A», который не получает «A» в различимом состоянии до операции, чтобы он был без гражданства в некотором смысле, но опять же это зависит от того, что вам нужно определить. –

+2

hmm .. как A может быть без гражданства в каком-либо смысле, если он содержит изменяемое состояние? – ZhongYu

+0

«Я хочу обновлять число раз по времени, и я должен сделать объект« без состояния »<- вы не можете иметь оба. Это похоже на [проблема X-Y] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem); что вы пытаетесь сделать? Каков контекст и проблема, которую вы решаете? –

ответ

0

AtomicInteger являются поточно, вы должны использовать его как это:

public class Atomic{ 
    private AtomicInteger number; 

    public Atomic(int number){ 
     this.number = new AtomicInteger(number); 
    } 

    public int getNumber() { 
    return number.get(); 
    } 

    public void setNumber(int number) { 
    this.number.set(number);; 
    } 

} 

Но если вы хотите сделать что-то окончательное, вы не должны использовать AtomicInteger, и последний должен быть известен во время компиляции, так ваше решение инкапсуляция, что-то вроде этого:

public final class Atomic{ 
    private int number; 

    public Atomic(int number){ 
     this.number = number; 
    } 

    public int getNumber() { 
    return this.number; 
    } 
} 

Для объекта без гражданства, я думаю, вы неправильно поняли, что это значит.

+0

парень, спасибо за ваш ответ, предлагается использовать 'final AtomicInteger i', ссылка никогда не изменяется, но значение в объекте может измениться. Но я не знаю, в чем польза для этого. –

+0

Что именно вы пытаетесь сделать здесь? –

1

Наличие AtomicInteger не сделает класс без гражданства. Обновление целого, атомарного или нет, изменит внутреннее состояние экземпляра.

Вы можете сделать класс неизменным, то есть состояние не может измениться, и создать новый экземпляр для каждого изменения состояния. Пример:

public class A { 
    private final int number; 
    public A(int n) { 
     number = n; 
    } 
    public int getNumber() { 
     return number; 
    } 
    public A setNumber(int n) { 
     return new A(n); 
    } 
} 
+0

парень, спасибо за ваш ответ, предлагается использовать последний AtomicInteger i, ссылка никогда не меняется, но значение в объекте может измениться. Но я не знаю, в чем польза для этого. –

Смежные вопросы