2013-07-30 16 views
10

Mam następujący kodJawa, najbardziej skuteczny sposób przekazać tablicę ciągów jako parametru Metoda

String[] args = {"a", "b", "c"}; 
method(args); 


private void method(String[] args){ 
    return args; 
} 

Dlaczego nie mogę wykonać następujące czynności bez błędów?

method({"a", "b", "c"}); 

Ten kod jest przykładem właśnie do udowodnienia tej tezy, a nie rzeczywistych metod używam. Chciałbym zamiast tego zrobić drugą metodę, aby wyczyścić mój kod i uniknąć deklarowania tuzina różnych tablic, gdy użyję ich tylko raz, aby przejść do mojej metody.

Sercem tej kwestii jest to, co jest najbardziej skuteczny sposób przekazać tablicę ciągów jako metoda A paramter.

+1

możliwe duplikat [Po przejściu {a, b, c} sposobu nie działa?] (Http://stackoverflow.com/questions/1017486/why-passing-abc-to-a-method- patrz także [Java: składnia inicjalizacji macierzy] (http://stackoverflow.com/questions/5387643/java-array-initialization-syntax), a zwłaszcza [Dlaczego stałe tablicowe mogą być używane tylko w inicjalizatorach?] (http : //stackoverflow.com/q/10520617/139010) –

+0

Zmieniano pytanie i odpowiedź na nowo cel być bardziej specifcly o najbardziej efektywny sposób przekazać tablicę jako parametry przewidziane linki nie dyskutować varargs, do nich pytanie nie powinno już być uważane duplikować. –

+0

Nawiasem mówiąc, twoje edytowane pytanie _still_ nie wspomina o varargs. –

Odpowiedz

6

Podejrzewam, że chcesz używać varargs. Nie musisz nawet tworzyć tablicy dla wysłanych argumentów o zmiennej długości.

String[] strings = method("a", "b", "c"); 

private String[] method(String... args){ 
    return args; 
} 

lub

String[] strings = array("a", "b", "c"); 

private <T> T[] array(T... args){ 
    return args; 
} 

lub jeśli chcesz skondensować dodatkowych wojsk

String[] strings = array("a, b, c"); 

private String[] array(String args){ 
    return args.split(", ?"); 
} 
+0

Czy są 3 "." po String, ponieważ miałem 3 struny? –

+1

Czy parametr varargs musi być ostatnim parametrem metody? To jest ciekawość, ponieważ nie jest ujęte w pierwotne pytanie. –

+1

Nie, liczba okresów nie ma nic wspólnego z liczbą Ciągów. Jest to składnia dla varargs. I tak, parametr varargs musi być ostatni. – Kayaman

16

spróbować

method(new String[]{ "a", "b", "c"}); 

że sposób system wie, że jest to nowy string-array.

Java nie jest jak php;)

2

Nie trzeba nazwanego odwołanie do tablicy. Można zainicjować i przekazać anonimową tablicę w następujący sposób:

method (new String[]{"a", "b"}); 
6

Jeśli używasz:

method({ "a", "b", "c"}); 

następnie java nie ma pojęcia, czy chcesz tablicę z String lub z Object. można jednoznacznie powiedzieć, jaki rodzaj java tablicy to jest tak:

method(new String[] { "a", "b", "c"}); 

tamtędy Java może powiedzieć, że masz na myśli tablicę String.

Powiązane problemy