ㅇ.ㅇ
[Java] non-varargs call of varargs method with inexact argument type for last parameter 본문
Error
[Java] non-varargs call of varargs method with inexact argument type for last parameter
yun_ 2025. 3. 19. 08:53반응형
상황
컴파일하는 과정에서 생소한 Warning이 나왔다.
에러 내용
[WARNING] non-varargs call of varargs method with inexact argument type for last parameter;
cast to java.lang.Object for a varargs call
cast to java.lang.Object[] for a non-varargs call and to suppress this warning
문제 원인
가변 인자(varargs) 메서드를 호출할 때, 마지막 인자가 정확한 타입이 아니라서 문제가 발생하고 있다. 해결책으로 Object나 Object[]로 캐스팅하라는 제안이 포함되어 있다.
// 문제가 되는 코드
GlobalContext.getMessage(request.getSession(false), i18nMessage.getMessageKey(), i18nMessage.getArgs());
// GlobalContext.getMessage() 메서드의 시그니처
public static String getMessage(HttpSession session, String messageKey, Object... args)
args가 가변 인자(varargs) → Object... 타입으로 선언되어 있음.
Object... args는 가변 인자(varargs)로 Object[] 타입의 인자를 받을 수 있지만, Object[]을 직접 전달하면 Java에서는 가변 인자로 해석할지, 배열로 넘길지 애매하다고 판단해서 경고가 발생한다. Object[]을 직접 넘길 경우 Java는 이를 이중 배열(Object[][])로 해석할 가능성이 있다.
해결방법
이렇게 (Object[])로 명시적 캐스팅하면 Java가 args를 가변 인자가 아니라 배열로 해석하게 돼서 경고가 사라진다.
GlobalContext.getMessage(request.getSession(false), i18nMessage.getMessageKey(), (Object[]) i18nMessage.getArgs());
반응형