, Если Ваш метод называют внешне, запустите с чего-то вроде этого:
public void method(Object object) {
if (object == null) {
throw new IllegalArgumentException("...");
}
Затем в остальной части того метода, Вы будете знать, что object
не является пустым.
, Если это - внутренний метод (не часть API), просто документ, что это не может быть пустым, и вот именно.
Пример:
public String getFirst3Chars(String text) {
return text.subString(0, 3);
}
Однако, если Ваш метод просто передает значение, и следующий метод передает его и т.д., это могло стать проблематичным. В этом случае можно хотеть проверить аргумент как выше.
, Это действительно зависит. Если находят, что я часто делаю что-то вроде этого:
if (object == null) {
// something
} else {
// something else
}
, Таким образом, я перехожу и делаю две совершенно других вещи. Нет никакого ужасного фрагмента кода, потому что я действительно должен сделать две разных вещи в зависимости от данных. Например, я должен работать над входом, или я должен вычислить хорошее значение по умолчанию?
<час> на самом деле редко для меня использовать идиому" if (object != null && ...
".
может быть легче дать Вам примеры при показе примеров того, где Вы обычно используете идиому.
Разрешено ли виртуальной машине перемещать буфер до того, как он будет окончательно освобожден?
Он не будет перемещать его, потому что прямой буфер не является частью кучи GC.
Если я создам новый буфер в собственном код с использованием NewDirectByteBuffer, чей ответственность заключается в том, чтобы освободить резервная память?
Освободить ее - это ваша ответственность (собственный код). JVM не могла знать, какой метод использовался для выделения этого резервного хранилища (мог быть malloc'd, мог быть статическим буфером и т. Д.)
Что произойдет, если я создам новый буфер в собственном коде с использованием NewDirectByteBuffer и адрес уже используется прямым буфером?
Учитывая, что виртуальная машина не будет пытаться освободить память, адрес которой передан в NewDirectByteBuffer, ничего не произойдет, если вы передадите один и тот же адрес дважды.