Home >Java >javaTutorial >Can Java's Variable Arguments (Varargs) Accept Arrays as Arguments?

Can Java's Variable Arguments (Varargs) Accept Arrays as Arguments?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-30 19:36:14247browse

Can Java's Variable Arguments (Varargs) Accept Arrays as Arguments?

Can Arrays Be Passed as Arguments to Methods with Variable Arguments in Java?

Consider the following method:

class A {
  private String extraVar;
  public String myFormat(String format, Object ... args){
    return String.format(format, extraVar, args);
  }
}

The intent is for args to be individually passed to String.format, but as myFormat treats args as Object[], it conflicts with the goal.

Java's Varargs (Variable Arguments)

Java's syntactic sugar T... corresponds to T[]. According to the Java Language Specification (JLS 8.4.1), the final formal parameter may be variable arity, which considers it as an array of the specified type. Therefore, variable arity methods accept a variable number of arguments. Invocations of such methods can contain more actual arguments than formal parameters.

Solution

To achieve the desired behavior, an array can be passed to a method with variable arguments. The underlying principle is that every Object in the array is passed as an individual argument.

Here's a demonstrative example:

public static String ezFormat(Object... args) {
    String format = new String(new char[args.length])
        .replace("", "[ %s ]");
    return String.format(format, args);
}

public static void main(String... args) {
    System.out.println(ezFormat("A", "B", "C"));
    // prints "[ A ][ B ][ C ]"
}

Note that String... is equivalent to String[].

Varargs Gotchas

  • Passing Null: Invoking a varargs method with only a null value will result in NullPointerException. To pass a single null value, use new Object[] { null } or (Object) null.
  • Adding Extra Arguments: To add an extra argument when passing an array using varargs, create a new array to accommodate the extra element.
  • Passing Arrays of Primitives: Varargs only support reference types. To pass values of primitives, convert them to arrays of corresponding wrapper classes.

The above is the detailed content of Can Java's Variable Arguments (Varargs) Accept Arrays as Arguments?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn