Передача byte [] в качестве одного параметра в метод vararg - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть метод, у которого есть параметр varargs. Это выглядит так:

public void sampleFunction(String name, Object... args) {

}

Я хочу передать byte[] этому методу, но как один параметр. Как я могу это сделать?

byte[] myByteArray = functionReturningAByteArray();

sampleFunction("Name", myByteArray);

Будет ли это рассматриваться как массив или myByteArray будет рассматриваться как отдельный объект?

Когда я передал byte[], IntelliJ сообщает как Confusing primitive array argument to varargs method. Я попытался привести myByteArray к Object, как это было предложено, затем он сообщает, что это избыточное приведение.

Я хочу передать его как один объект.

1 Ответ

5 голосов
/ 05 февраля 2020

A byte[] - это примитивный массив, поэтому он определенно не является Object[]. Следовательно, он будет передан как один экземпляр Object в ваш метод vararg.

Если, с другой стороны, вы передадите массив Byte[], он будет передан как несколько Object аргументов. к методу vararg.

Конечно, вы можете убедиться в этом сами:

public static void sampleFunction(String name, Object... args) {
    System.out.println (args.length);
}

sampleFunction("x", new byte[] {1,2,3});
sampleFunction("x", new Byte[] {1,2,3});

Первый вызов печатает 1, а второй вызов печатает 3.

...