2016-09-29 3 views
2

Некоторое время назад я начал расследовать пакет java.util.concurrent. И мой вопрос о классе AtomicStampedReference. Класс имеет методМетод AtomicStampedReference.get(): почему параметр является массивом?

public V get(int[] stampHolder) { 
    ... 
} 

который получает ссылку и печать атомарно (пожалуйста, поправьте меня, если я ошибаюсь).

Есть ли особые причины, почему параметр для метода является массивом? Документация ничего не говорит об этом.

ответ

2

Возможно (возможно) это просто взломать simulate out parameters, так как в этом случае должны быть возвращены два значения: V и значение int.

Другая возможность была бы вернуть кортеж Tuple<V,Integer>, но Java не имеет Tuple класса, и было бы, возможно, будет менее эффективным, чтобы создать экземпляр Tuple объекта и дополнительно бокс int, что может иметь важное значение в контексте параллелизм.

+0

Понятно, что на самом деле мы получаем два свежих значения. Но почему г-н. Дуг Ли решил использовать 'int [] stampHolder' вместо использования' int stampHolder' например? Этот метод использует только первый элемент массива - 'stampHolder [0] = p.integer'. –

+0

@DmitriyProtsenko: Хорошо, если метод был определен как «public V get (int stampHolder)», если «stampHolder» изменен, вызывающий объект не получит обновленное значение, поскольку он передается по значению. см. http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value – user140547

+0

Последняя ссылка очень полезна. Теперь у меня нет вопросов. Благодаря! –