Условием для hasArray
является
(hb != null) && !isReadOnly
isReadOnly
изменяется, если вы используете asReadOnlyBuffer
CharBuffer.allocate(20).asReadOnlyBuffer();
например.
Так что да, нам это нужно.
Возьми эту строку
final CharBuffer cb = instance.getCharBuffer(...);
Это только для чтения или нет? Содержит ли он действительный массив char[]
? Мы действительно не знаем. Если мы сделаем
cb.array();
и это буфер только для чтения, мы получаем ReadOnlyBufferException
.
Если он не поддерживается массивом char[]
, мы получаем UnsupportedOperationException
.
Итак, что мы могли бы сделать, это
if (cb.hasArray()) {
final char[] arr = cb.array();
}
Теперь мы Exception
-безопасны.
Кроме того, вы можете быть уверены, что инженеры Oracle / OpenJDK / whatJDK знают, что они делают;)