본문 바로가기

프로그래밍/Java

[JAVA|기초] The method format(String, Object[]) in the type String is not applicable

반응형
자바에서 다음과 같이 코드를 만들어 짜 봤는데 윈도우의 이클립스 환경에서는 문제가 없었고, 리눅스 이클립스 환경에서 에러를 발생시키며 한참을 고민하게 했다.

우선 코드 : C의 sprintf, CString의 Format 과 비슷한 메소드이다.

        utfstring = String.format("%%%02X%%%02X%%%02X",
                                 utfb[0], utfb[1], utfb[2]);

이 코드 부분이 이클립스 Build id: 20090920-1017 에서는 문제없이 컴파일이 됐었다. 그러나, 리눅스에 깔린 Eclipse Platform Version: 3.2.0 Build id: M20060921-0945 (CentOS release 5 (Final))에서는 다음과 같은 에러를 발생시켰다.

        The method format(String, Object[]) in the type String is not applicable for the arguments (String, byte, byte, byte)
        String 형인 format(String, Object[]) 메소드는 (String, byte, byte, byte) 형 인자에 적용할 수 없습니다.

구글에서 검색하여 보니 제일 먼저 나오는 답변이 new Object[] { } 로 인자를 감싸라는 방법이었다. 그래서 다음과 같이 수정을 해 봤다.

        utfstring = String.format("%%%02X%%%02X%%%02X",
                                 new Object[] { utfb[0], utfb[1], utfb[2] });


format 스트링의 인자들이 String 들인 유사한 코드에서는 문제가 해결되었으나, 유독 byte 형인 utfb[i] 들에서 다음과 같은 에러를 계속 발생시켰다.

        Type mismatch: cannot convert from byte to Object
        형이 맞지 않음: byte를 Object로 변환할 수 없음.

강제로 (Object)로 캐스팅도 해 보고, (Object)(int) 로 캐스팅도 해 보고 하였으나, 계속 유사하게 형변환이 불가하다는 메시지가 나왔다.

한참을 왜그런지 모르고 고민하다가 딱히 내 질문에 맞는 답변은 아니었으나, 이 답변을 보고, byte 나 int 등의 형이 일반적인 Object와는 다른 형이라는 걸 알았다. 그래서, 결국 에러를 피해간 코드는 다음과 같다. 물론 다른 더 좋은 방법이 있을 수도 있으리라. (이후에 나와 같이 고민하는 사람들을 위해 글을 써 둔다.)

        utfstring = String.format("%%%02X%%%02X%%%02X",
                                 new Object[] { new Byte(utfb[0]), new Byte(utfb[1]), new Byte(utfb[2]) });




728x90