Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

ㅇ.ㅇ

[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());

 

반응형