null은 캐스팅이 되는건야 안 되는거야?
@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의 소스코드를 보면 나와있다.