2016-11-18 11 views
1

에 varags 인수 과부하 오류 :컴파일러 에러가 나는이 같은 두 가지 기능을 가지고 자바

두 번째 기능을 사용하려고하는데 이유를 모르겠습니까?

업데이트 :

public interface MyMessageProvider { 
    String getMessage(String code, Object... objects); 
    String getMessage(Locale locale, String code, Object... objects); 
} 

ReloadableResourceBundleMessageSource

봄을 그 인터페이스를 구현하고 또한 확장 실제 클래스입니다 : 코드의 문맥

이 그 두 가지 기능을 정의하는 인터페이스입니다

public class CustomMessageSource extends ReloadableResourceBundleMessageSource implements MyMessageProvider { 
    public static final String BEAN_NAME = "messageSource"; 

    public static CustomMessageSource getInstance() { 
     return (CustomMessageSource) SpringApplicationContext.getBean(BEAN_NAME); 
    } 

    @Override 
    public String getMessage(String code, Object[] objects) { 
     return getMessage(getCurrentLocale(), code, objects); 
    } 

    @Override 
    public String getMessage(Locale locale, String code, Object... objects) { 
     return getMessage(code, objects, code, locale); 
    } 
} 

그리고 저는 다음과 같은 클래스에서 getMessage를 호출합니다 :

public class MyService { 
    @Autowired 
    private CustomMessageSource messageSource; 

    public String createSomeMessage(){ 
     messageSource.getMessage("online.order"); 
    } 

} 

String getMessage(String code)을 인터페이스/구현에 추가하여 문제를 해결할 수 있습니다. 컴파일 오류로 인해 나 같은 생각이 들지 않습니다. 그러나 컴파일 오류가 발생합니다!

+1

빌드가 최신 상태입니까? 같은 오류가 계속 나타나면'Project -> Clean'을 시도해보십시오. 좀 더 많은 맥락에서 [편집]하십시오. 위의 코드는 설명 된 오류를 _ 생성하지 않습니다. –

+1

@MattClark, 내가 프로젝트를 청소했지만 여전히 동일한 컴파일 오류가 발생합니다. 지금까지 찾을 수있는 유일한 해결책은'String getMessage (String code)'라는 새로운 함수를 정의하고 그 내부에있는 첫 번째 함수를 varags로 null로 호출하는 것입니다. – Arashsoft

+0

이상하게 보입니다. 첫 번째 메소드가 호출되어야합니다. 다른 오버로드 된 메소드가 있습니까? – Andrew

답변

3

오버라이드 (override) 된 메소드의 서명은 약간은 일로 Object...을 고려, 그것은 중요하지 않습니다, 컴파일러를 들어

public String getMessage(String code, Object[] objects) 

public String getMessage(String code, Object... objects) 

에서 부모 메소드 서명을 변경하는해야 Object[]으로 변환하고 해당 변환을 수행합니다 (컴파일 단계가 완료된 후 Object... 항목이 없음).

반면에 우리에게는 중요합니다. 메소드 서명을 정확히 따라야합니다.

instance.getMessage("code", new Object[]{}); 
instance.getMessage("code", null); 
+1

네, 같은 시간에이 문제를 발견했습니다 :) 그러나 컴파일러가이 문제/ – Arashsoft

+0

@Arashsoft에 대해 아무 말도하지 않았으므로'Object ... '와'Object []'를 같은 것으로 간주하므로 무시없이 넘겨졌습니다. 문제. – Andrew

+0

그러나이 게시물은 그들이 동일하지 않다는 것을 보여줍니다. 그것은 컴파일러 버그입니다 :) – Arashsoft

0

OMG : 메소드를 호출하려면 배열이나이 null을 통과해야! 나는 그 문제를 직접 발견했다. 내가

String getMessage(String code, Object[] objects) 

그것은 어떤 문제없이 잘 작동하지만 난 어떤 varags 인수없이의 getMessage를 호출 할 경우, 재정이 그것을 처리 할 수와

String getMessage(String code, Object... objects); 

를 오버라이드 경우 문제는 구현 클래스입니다.