이상한 배열 반환 유형
[]
이와 같은 메서드 서명 뒤에 배치 된 배열을 본 사람 이 있습니까?
public static String mySplit(String s)[] {
return s.split(",");
}
public static void main(String... args) {
String[] words = mySplit("a,b,c,d,e");
System.out.println(Arrays.toString(words));
}
인쇄물
[a, b, c, d, e]
과거에는 "C"호환성에 대해 이상한 표기법이 사용되었지만 C로 작성하는 사람도 상상할 수 없습니다.
왜 이것이 허용되는지 아는 사람이 있습니까?
중요한 경우 Java 7 업데이트 10을 사용하고 있습니다.
이것은 Java 6에서 동일한 작업을 수행합니다. http://ideone.com/91rZV1
BTW 이것은 컴파일되지 않으며 예상하지도 않습니다.
public static <T> List mySplit(String s)<T> {
return Collections.emptyList();
}
왜 이것이 허용되는지 아는 사람이 있습니까?
이 경우 Java 자체와의 하위 호환성을위한 것입니다. 로부터 JLS 섹션 8.4 :
이전 버전의 Java SE 플랫폼과의 호환성을 위해 배열을 반환하는 메서드 선언은 형식 매개 변수 목록 뒤에 배열 유형의 선언을 형성하는 빈 대괄호 쌍 (전체 또는 일부)을 배치 할 수 있습니다. 이것은 다음과 같은 노후화 된 프로덕션에서 지원되지만 새 코드에서는 사용해서는 안됩니다.
그리고 그렇습니다. 다른 개발자들에게 충격을주는 것 외에 다른 좋은 목적이없는 혐오스러운 것으로 간주해야합니다. 사실, 당신은 그것을 본 적이없는 사람들을 상대로 컴파일 될 것이라고 베팅함으로써 파티에서 돈을 얻기 위해 그것을 사용할 수있을 것입니다 ...
올바른 코더가 유효하지 않을 것으로 예상하는 방법은 다음과 같습니다.
public String[] mwahahaha(String[] evil[])[] {
return evil;
}
마치
String[] a;
와 같다
String a[];
메서드 반환 유형의 구문에 대해서도 동일하게 작동합니다.
public static String mySplit(String s)[] {
와 같다
public static String[] mySplit(String s) {
하지만 아직 생산적인 코드에서 언급 한 버전을 본 적이 없다고 생각합니다.
다음 변수 선언이 모두 동일하다는 것과 같은 이유라고 생각합니다.
String[] array
String array[]
이것은 C 개발자가하는 일이므로 그들을 돕기 위해 포함되었습니다.
반환 유형이 Strings
선언과 동일한 배열임을 Java에 알리고 있다고 생각합니다.
static String[] mySplit(String s) {...
변수 선언과 유사합니다.
String myStringArray[];
다음과 같다
String[] myStringArray;
좋은 질문; Java 파서를 구현했을 때이 시점에서 JLS 문법에 정말 혼란 스러웠던 것을 기억합니다.
John의 답변을 확장하기 위해 다음과 같은 작업이 진행됩니다.
이것이 중요한 장소는 (적어도) 5 곳입니다.
- 메서드 유형 서명
- 지역 변수 선언
- 필드 선언
- 형식 매개 변수
for
-루프
Here's an excerpt from the grammar, focusing on method declarations:
MethodOrFieldDecl:
Type Identifier MethodOrFieldRest
MethodOrFieldRest:
FieldDeclaratorsRest ;
MethodDeclaratorRest
MethodDeclaratorRest:
FormalParameters {[]} [throws QualifiedIdentifierList] (Block | ;)
Type:
BasicType {[]}
ReferenceType {[]}
(Warning: it's difficult to read the grammar because the square and curly brackets are sometimes literals and sometimes metacharacters.)
This shows that []
can appear both under the Type
rule, and as part of the MethodDeclaratorRest
rule. It is optional in both places.
Yes, this is allowed,
same reason that:
String[] myArray;
is equivalent to
String myArray[];
참고URL : https://stackoverflow.com/questions/14203298/strange-array-return-type
'Development Tip' 카테고리의 다른 글
핵심 데이터-경로에서 최적화 된 모델을로드하지 못했습니다. (0) | 2020.10.30 |
---|---|
java, spring, hibernate, maven과 관련된 읽기 좋은 블로그는 무엇입니까? (0) | 2020.10.29 |
sock send () 명령에서 "일시적으로 리소스를 사용할 수 없음"이 발생하는 원인 (0) | 2020.10.29 |
JSLint / JSHint에게 이미 정의 된 전역 변수를 알리는 방법 (0) | 2020.10.29 |
사용하지 않을 때 SQL Azure DB 중지 (0) | 2020.10.29 |