Weird "[]" после подписи Java-метода

Я посмотрел на некоторый Java-код сегодня, и я нашел какой-то странный синтаксис:

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

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

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

Ответ 1

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

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

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

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

MethodDeclarator:
    MethodDeclarator []

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

Ответ 2

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

Ответ 3

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

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

int tab[10];

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

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

Ответ 4

java синтаксис позволяет:

int[] intArr = new int[0];

а также

int intArr[] = new int[0];

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

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