Posso passare un array come argomenti a un metodo con argomenti variabili in Java?


276

Mi piacerebbe essere in grado di creare una funzione come:

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

Il problema qui è che argsè trattato come Object[]nel metodo myFormat, e quindi è un singolo argomento per String.format, mentre mi piacerebbe ogni singolo Objectin argsper essere passato come un argomento nuovo. Poiché String.formatè anche un metodo con argomenti variabili, questo dovrebbe essere possibile.

Se ciò non è possibile, esiste un metodo simile String.format(String format, Object[] args)? In quel caso ho potuto anteporre extraVarad argsutilizzare un nuovo array e passarlo a tale metodo.


8
Non posso fare a meno di chiedermi perché questa domanda sia un tipo di domanda "è questo valido". Non avresti potuto provarlo? Non esagerare con la domanda, ti farai più male che bene.
Kamasheto,

21
abbastanza vero, questo avrebbe potuto essere facilmente testato. tuttavia, la cosa bella di una domanda come questa è che espone l'argomento e sollecita risposte interessanti.
Akf

2
In realtà ho provato il codice sopra, con l'intenzione di passare gli argomenti dell'array come argomenti al metodo. Tuttavia, non mi ero reso conto che avrei dovuto anteporre extraVar agli argomenti prima. Quando sai che gli argomenti variabili sono trattati come un array (anche al di fuori del metodo), questo è ovviamente abbastanza logico.
user362382,

Risposte:


181

Il tipo sottostante di un metodo variadico function(Object... args) è function(Object[] args) . Sun ha aggiunto varargs in questo modo per preservare la compatibilità con le versioni precedenti.

Quindi, si dovrebbe solo essere in grado di anteporre extraVarad argse call String.format(format, args).


1
Passare un argomento di tipo X[]in un metodo x(X... xs)dà il seguente avvertimento in Eclipse:Type X[] of the last argument to method x(X...) doesn't exactly match the vararg parameter type. Cast to X[] to confirm the non-varargs invocation, or pass individual arguments of type X for a varargs invocation.
Luke Hutchison,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.