В чем разница между "..." и "[]" в параметрах Java-функций Android?
Я видел примеры, когда один помещает параметр массива в функцию, как это:
function f(String... strings)
{
}
и я думаю, что это один из способов сказать "ожидать неопределенного количества строк".
Но как это отличается от String[] strings
?
Когда / почему / как я должен использовать это (обозначение трех точек)?
4 ответа
Как вы уже догадались, нотация... (называемая varargs) определяет один или несколько параметров данного типа. В вашем методе вы получите String[] в обоих случаях. Разница на стороне звонящего.
public void test1(String... params) {
// do something with the String[] params
}
public void test2(String[] params) {
// do something with the String[] params
}
public void caller() {
test1("abc"); // valid call results in a String[1]
test1("abc", "def", "ghi"); // valid call results in a String[3]
test1(new String[] {"abc", "def", ghi"}); // valid call results in a String[3]
test2("abc"); // invalid call results in compile error
test2("abc", "def", "ghi"); // invalid call results in compile error
test2(new String[] {"abc", "def", ghi"}); // valid call
}
Разница между ними заключается в том, как вы вызываете функцию. С помощью String var args вы можете опустить создание массива.
public static void main(String[] args) {
callMe1(new String[] {"a", "b", "c"});
callMe2("a", "b", "c");
// You can also do this
// callMe2(new String[] {"a", "b", "c"});
}
public static void callMe1(String[] args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
public static void callMe2(String... args) {
System.out.println(args.getClass() == String[].class);
for (String s : args) {
System.out.println(s);
}
}
Позвольте мне попытаться ответить на ваш вопрос один за другим.
Во-первых, функция f(String... strings) { } (...) определяет переменное число аргументов, что означает множественные аргументы. Вы можете передать число аргументов. Пожалуйста, обратитесь к приведенному ниже примеру,
static int sum(int ... numbers)
{
int total = 0;
for(int i = 0; i < numbers.length; i++)
total += numbers[i];
return total;
}
и вы можете вызвать функцию как сумма (10,20,30,40,50,60);
Во-вторых, строки String[] также похожи на несколько аргументов, но в основной функции Java вы можете использовать только строковый массив. Здесь вы можете передать аргументы через командную строку во время выполнения.
class Sample{
public static void main(String args[]){
System.out.println(args.length);
}
}
java Образец теста 10 20
В-третьих, когда и где вы должны использовать средства,
Предположим, вы хотите передать аргументы через командную строку, а также во время выполнения вы можете использовать строку String[].
Предположим, что вы хотите передать n количество аргументов в любое время из вашей программы или вручную, тогда вы можете использовать (...) несколько аргументов.
String... strings - это, как вы сказали, неопределенное число Strings. String[] ожидает массив
Разница в том, что массив имеет фиксированный размер, с которым он инициализируется. Если это функция f(String[] strings), то это просто ожидаемый параметр.