Wenn ich für Android programmiere und eine AsyncTask verwende, sieht die doInBackground-Methode folgendermaßen aus.
protected String doInBackground(String... args)
Wenn ich die Argumente jedoch irgendwo in diesem Block verwende, kann ich wie in einem normalen String-Array darauf zugreifen, beispielsweise in meinem Programm
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Was gut funktioniert und ich habe kein Problem damit. Aber ich frage mich, warum sie (String ... args) anstelle eines normalen Arrays von Strings verwenden. Liegt es nur daran, dass Sie in der aufrufenden Methode einfach Folgendes schreiben können:
new AsyncHandler.execute("argument1","argument2","argument3",...)
anstatt ein neues Array zu erstellen, um die Argumente zu übergeben? Obwohl wir schreiben konnten
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
Das ist etwas ausführlicher.
Sind (String ...) und String [] gleichbedeutend mit ihrer Funktionsweise, aber die Übergabe von Argumenten ist mit ersteren einfacher, da kein Array erstellt werden muss? Soweit ich das beurteilen kann, wird Ersteres auch in ein String-Array im Hintergrund übersetzt. Würden beide also mit demselben Code kompilieren und es ist nur "syntaktischer Zucker"?
(String ...)
bedeutet, dass Sie so vieleString
Parameter hinzufügen können, wie Sie möchten. DiesString[]
ist ein Parameter, bei dem es sich um ein Array von Zeichenfolgen handelt.(String ...)
hängt vom ersten Parameter abAsyncTask
, es ist nicht immerString
.String...
als ob esString[]
String[]
, aber nehmen wir an, es war standardmäßigString[]
. Es wäre ein ziemliches Problem gewesen, verschiedeneString
Parameter in einem Array zu verwenden. Stattdessen gaben sie eine Flexibilität zu verwenden(String ...)
.new String[]{...}
zu konvertieren (es ist, was tatsächlich passiert, wenn Sie eine verwendenString...
)Antworten:
(String ...)
ist eine Reihe von Parametern des TypsString
, wo , wieString[]
ist ein einzelner Parameter .Jetzt
String[]
kann hier derselbe Zweck vollständig erfüllt werden,(String ...)
bietet jedoch mehr Lesbarkeit und Benutzerfreundlichkeit.Es bietet auch eine Option, mit der wir mehrere Arrays
String
anstelle eines einzigen übergeben könnenString[]
.quelle
String[]
eine MethodeString...
als Parameter übergeben werden kann, können zweiString[]
s nicht. Hier findet keine implizite Array-Verkettung statt.Eine Funktion von String [] vs String ... ist, dass der "String ..." nicht Teil des Aufrufs sein muss.
Wenn Sie dann
callerTest();
die Ausgabe aufrufen, wird:quelle