Whiteship's Note

null은 캐스팅이 되는건야 안 되는거야?

Java : 2010.03.02 13:38


    @Test
    public void nullCasting() throws Exception {
        Class nullClass = (Class)null;
        Class thisClass = this.getClass();
        assertThat(nullClass, is(nullValue()));
        assertThat(thisClass, is(instanceOf(Class.class)));
        assertThat(nullClass, is(not(instanceOf(Class.class))));
    }

캐스팅이 된것 같다. 하지만 안 됐다. 

저 상태에서 컴파일 에러가 날 것 같지만 컴파일 에러가 발생하지 않았다.

Whiteship whiteship = (Whiteship)thisClass;

하지만 이런 코드를 적어보면 컴파일 에러가 난다. 

그렇다면 null을 어느 타입으로든 캐스팅 하는건 문법적인 에러가 아닌가본데... 사실 그 안의 인스턴스를 사용하려들면 에러가 난다.

nullClass.getDeclaredMethods();

즉 이런 코드를 실행하면 NullPointerException이 발생하게 된다.

 따라서 null을 다른 타입으로 캐스팅을 하는 코드를 작성 하더라도 컴파일 에러가 나지는 않지만 그렇다고 해서 실제로 캐스팅이 된 것은 아니다.

대체 이런 짓을 왜 할까? 언제 null을 다른 타입으로 캐스팅 하는 코드를 써먹을 수 있을까?
퀴즈로 남겨줄까 한다. 후훗.

힌트이자 정답을 알려주자면...스프링의 ClassPathResource의 소스코드를 보면 나와있다.
top




: 1 : ··· : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : ··· : 2638 :