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...
als ob esString[]
String[]
, aber nehmen wir an, es war standardmäßig String[]
. Es wäre ein ziemliches Problem gewesen, verschiedene String
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 verwenden String...
)
(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
.