[java] Java 메서드 서명 후 이상한 “[]”

오늘 Java 코드를 살펴 보니 이상한 구문이 있습니다.

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

나는 그것이 컴파일 할 수 없다고 생각했고 내가 생각했던 오타를 고치고 싶었지만 Java 컴파일러가 실제로 그것을 받아들이는 것을 기억했습니다!

누군가가 의미를 이해하도록 도와 주시겠습니까? 함수의 배열입니까?



답변

을 반환하는 메서드입니다 int[].

Java 언어 사양 (8.4 메서드 선언)

이전 버전의 Java 플랫폼과의 호환성을 위해 배열을 반환하는 메서드에 대한 선언 양식은 매개 변수 목록 뒤에 배열 유형의 선언을 형성하는 빈 대괄호 쌍 (전체 또는 일부)을 배치 할 수 있습니다.

이것은 노후화 된 프로덕션에서 지원됩니다.

MethodDeclarator :
    MethodDeclarator []

그러나 새 코드에서 사용해서는 안됩니다.


답변

재미있는 질문입니다. 자바에서는 int[] a;뿐만 아니라 int a[];.
이 관점에서 동일한 결과를 얻으려면을 이동 []
하고 작성하면 public int[] get() {됩니다.
여전히 코드가 난 독기에서 나온 것 같습니다 …


답변

C 태그가 있으므로 C와 C ++에서 유사한 (하지만 동일하지는 않음) 표기법이 가능하다는 점을 지적하겠습니다.

여기서 함수 f는 10 개의 정수 배열에 대한 포인터를 반환합니다.

int tab[10];

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

Java에는 별표와 괄호가 필요하지 않습니다.


답변

java의 구문은 다음을 허용합니다.

int[] intArr = new int[0];

그리고 또한

int intArr[] = new int[0];

c 스타일 구문에서 오는 것이 더 익숙해 보입니다.

마찬가지로 함수를 사용하면 이름이 [] 앞 또는 뒤에 올 수 있으며 유형은 여전히 ​​int []입니다.


답변