Java

Cannot make a static reference to the non-static method getClass() from the type Object

sstdio.h·2015년 4월 1일·조회 5,874

getClass()를 오류 없이 사용하고 있었는데, 해당 코드를 static 메서드나 static 블록 안으로 옮겼더니 아래와 같은 오류가 발생했다.

Cannot make a static reference to the non-static method getClass() from the type Object

원인

getClass()Object에 정의된 인스턴스 메서드다. 즉, 어떤 객체 인스턴스가 있을 때 그 객체의 런타임 클래스를 가져오기 위해 호출하는 메서드다.

반면 static 영역에서는 특정 인스턴스 없이 클래스 자체를 기준으로 코드가 실행된다. 그래서 인스턴스 메서드인 getClass()를 바로 호출하면 위와 같은 오류가 발생한다.

해결책

static 영역에서는 getClass() 대신 클래스 리터럴을 사용하면 된다.

getClass() -> 클래스명.class

예시

기존 코드가 아래와 같았다면:

getClass().getClassLoader()

static 영역에서는 다음처럼 변경한다.

Test.class.getClassLoader()

정리하면, 인스턴스 메서드 안에서는 getClass()를 사용할 수 있지만, static 메서드 안에서는 Test.class처럼 명시적으로 클래스명을 사용해야 한다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.