2012-09-11 5 views
2

flexiPrint() 메소드에 오버로드를 시도하면 Varargdemo이 발생하여 컴파일 타임 오류가 발생합니다. 컴파일러는 다음 시그니처를 동일하게 취급합니다.객체 클래스의 변수 vararg와 객체 클래스의 배열로 메소드 오버로드

public static void flexiPrint(Object... data){} 
public static void flexiPrint(Object[] data){} 

누군가가 동일한 대우를받는 이유를 설명 할 수 있습니까? 대답을 찾을 수 없었습니다.

답변

3

Object...는 아무것도하지만 자바 Object[]

... (세 점)을 나타낸다 varargs를 정의와 동일한 의미 배열이다.

우리는 일반적으로 (시간 오류를 컴파일) 같은 서명을 하나 개 이상의 방법이 클래스에서 허용되지 않습니다 가진, 그래서 main(String... args)

같은 주요 방법이 서명을 참조하십시오. 그래서 컴파일 시간 오류가 발생합니다.

3

"후드 아래"와 동일합니다. 변수 인수합니다 (...)는 매개 변수로 배열을 전달합니다 : 여전히 여러 인수가 배열로 전달되어야한다는 사실이다

을하지만, 가변 인수는 자동화 기능과 과정을 숨 깁니다. 또한 기존 API와 상위 호환이 가능합니다.

문서 here에서 확인할 수 있습니다.

2

가변 길이의 인수는 Object...과 같은 문법적인 설탕입니다. 예를 들어, 사용 :

flexiPrint("apple", "peach", "plum"); 

그런 다음 "사과", "복숭아", "매화"실제로으로 설정되어

가 :`[] { "사과", "복숭아", "매화"} 객체.

+0

메서드 오버로드는 이름은 같지만 반환 유형 및 매개 변수가 다른 두 번째 메서드를 지정하는 것입니다. 메소드 재정의 (Override)는 대답에 설명하는 것 (수퍼 클래스 메소드 오버라이드)입니다. – Brian

+0

맞습니다! 내 실수. – bfishman

+0

서명이 동일하다는 마지막 진술은 여전히 ​​사실이지만 수정 해 주셔서 감사합니다. +1 – Brian

관련 문제