Странный "[]" после подписи метода Java - PullRequest
117 голосов
/ 15 января 2011

Сегодня я посмотрел какой-то код Java и обнаружил странный синтаксис:

public class Sample {
  public int get()[] {
    return new int[]{1, 2, 3};
  }
}

Я думал, что не могу скомпилировать, и хотел исправить то, что считал опечаткой, но потом я вспомнил, что компилятор Java действительно принял это!

Может кто-нибудь помочь мне понять, что это значит? Это массив функций?

Ответы [ 4 ]

108 голосов
/ 15 января 2011

Это метод, который возвращает int[].

Спецификация языка Java (8.4 Объявления методов)

Для совместимости со старыми версиями платформы Java, форма декларации для метода, который возвращает массив, разрешено размещать (некоторые или все) пустой пары скобок, которые формируют объявление типа массива после списка параметров.

Это поддерживается устаревшим производством:

MethodDeclarator
MethodDeclarator []

но не должен использоваться в новом коде.

20 голосов
/ 15 января 2011

Забавный вопрос. В Java вы можете сказать int[] a;, а также int a[];.
С этой точки зрения, чтобы получить тот же результат, просто нужно переместить []
и написать public int[] get() {.
По-прежнему выглядит как код, полученный от обфускатора ...

10 голосов
/ 15 января 2011

Поскольку есть тег C, я укажу, что аналогичная (но не идентичная) запись возможна в C и C ++:

Здесь функция f возвращает указатель на массив10 дюймов.

int tab[10];

int (*f())[10]
{
    return &tab;
}

Java просто не нужны звезда и скобки.

4 голосов
/ 15 января 2011

Синтаксис Java позволяет следующее:

int[] intArr = new int[0];

, а также

int intArr[] = new int[0];

, который выглядит более знакомым из синтаксиса в стиле C.

то же самое, с функцией, имя может идти до или после [], а тип по-прежнему int []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...