Может ли Java varargs быть нулевым?

Я обнаружил, что проверяю это и спрашиваю, нужно ли это. У меня есть такой код:

public Object myMethod(Object... many) {
  if (many == null || many.length == 0)
    return this;
  for (Object one : many)
    doSomethingWith(one);
  return that;
}

Но потом я подумал... Не слишком ли я осторожен? Должен ли я проверять many == null? Возможно ли это в какой-либо текущей версии Java? Если да, то как? Если нет, я, вероятно, продолжу проверку, просто на случай, если Oracle решит, что в один прекрасный день он может быть нулевым.


person Ky Leggiero    schedule 02.02.2015    source источник
comment
@sdotdi что бы я попробовал? Разве myMethod(null) не передаст ему массив вроде new Object[]{null}?   -  person Ky Leggiero    schedule 02.02.2015
comment
В качестве примечания, код, который у вас есть, — это запах кода. Передача массива объектов varargs означает, что ваш метод может принимать что угодно. Я могу представить конкретные ситуации, в которых это может быть полезно, но я бы сказал, что обычно этого следует избегать.   -  person Andrew Eisenberg    schedule 02.02.2015
comment
ideone.com/wP9AFE   -  person Sotirios Delimanolis    schedule 02.02.2015
comment
Как предлагает IDEA, null можно явно передать методам varargs с помощью cast - (Object[]) null, так что да, передача null возможна в Java, и ваша проверка имеет смысл   -  person RomanMitasov    schedule 04.02.2021


Ответы (1)


Я попробовал это с Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0 on Linux 3.5.0-21-generic

Использование myMethod(null) не проходит new Object[]{null}, оно проходит null. Массивы — это объекты в Java и поэтому null допустимо для типа Object[].

Таким образом, ваша проверка нуля не слишком осторожна.

person Dave    schedule 02.02.2015