Przyjrzałem się dzisiaj kodowi Java i znalazłem dziwną składnię:
public class Sample {
public int get()[] {
return new int[]{1, 2, 3};
}
}
Pomyślałem, że nie może się skompilować i chciałem naprawić to, co uważałem za literówkę, ale potem przypomniałem sobie, że kompilator Java faktycznie to zaakceptował!
Czy ktoś może mi pomóc zrozumieć, co to znaczy? Czy jest to tablica funkcji?
Odpowiedzi:
Jest to metoda, która zwraca
int[]
.źródło
public int[] foo()[][] {
i sprawić, że ludzie zaczną krwawić.To zabawne pytanie. W javie możesz powiedzieć
int[] a;
, jak równieżint a[];
.Z tej perspektywy, aby uzyskać ten sam wynik wystarczy przesunąć
[]
i napisać
public int[] get() {
.Wciąż wygląda na to, że kod pochodzi z obfuskatora ...
źródło
Ponieważ istnieje znacznik C, zwrócę uwagę, że podobny (ale nie identyczny) zapis jest możliwy w C i C ++:
Tutaj funkcja
f
zwraca wskaźnik do tablicy 10 liczb całkowitych.Java po prostu nie potrzebuje gwiazdy i nawiasów.
źródło
f()[]
coś takiego(*f())
.składnia java pozwala na:
i również
co wygląda bardziej znajomo ze składni w stylu c.
tak więc w przypadku funkcji nazwa może występować przed lub po [], a typ to nadal int []
źródło