2013-08-21 5 views
3

Почему AtomicInteger имеет как int get(), так и int intValue()? Я вижу, что он также имеет float floatValue() среди других, от Number. Имеются ли последствия для поддержания атомарности параметра AtomicInteger или оба взаимозаменяемы?AtomicInteger's get() vs intValue()

ответ

6

Они должны быть взаимозаменяемыми. Вот соответствующая часть исходного кода для AtomicInteger:

public int intValue() { 
    return get(); 
} 
+1

Это неправда. получить окончательный. intValue не является окончательным. –

2

От Number class documentation:

Номер абстрактный класс суперкласс классов BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, и короткие.

От AtomicInteger documentation

Описания скопированного из класса:
Number Возвращает значение указанного числа в качестве междунара. Это может включать округление или усечение.

Как AtomicInteger Интерфейс объектов Number, intValue() должен быть перезаписан. В этом случае они равны. Для других типов (например, BigDecimal, Double или Float) это имеет смысл.

См. implementation at grepcode.

4

intValue определение:

/** 
* Returns the value of this {@code AtomicInteger} as an {@code int}. 
*/ 
public int intValue() { 
    return get(); 
} 

get определение:

/** 
* Gets the current value. 
* 
* @return the current value 
*/ 
public final int get() { 
    return value; 
} 

Вы можете ясно видеть, что get метод final. final методы нельзя переопределить.

Если мы расширим класс AtomicInteger, мы не сможем переопределить метод get, но мы можем переопределить метод intValue.