반응형
출처: 자바의 정석 - 남궁 성, 도우출판
http://blog.daum.net/_blog/BlogTypeView.do?blogid=0NhTQ&articleno=251
자바의 정석 연습문제를 풀다가 저런 오류가 나와서 검색을 해보니
static 메서드에서 non-static 클래스를 선언하였기 때문에 발생한다고 한다.
애초에 static 메소드는 인스턴스 변수를 사용할 수 없다.
그래서 클래스라고 별로 다르지 않기에 저런 오류를 뱉어낼 수 밖에 없는 것이다.
public class A { class B { } public static void C() { B b = new B(); // No enclosing instance of type...(이클립스 기준) } }
이를 해결 하기 위하여 다음과 같은 네 가지의 방법이 있다.
1. 내부 클래스에도 static을 붙여 static 메소드가 다룰 수 있는 static 멤버로 바꾼다.
public class A { static class B { } public static void C() { B b = new B(); // 에러 없음 } }
2. 메소드에도 static을 빼서 non-static 메소드로 만들어 non-static 멤버를 사용할 수 있게 한다.
public class A { class B { } public void C() { B b = new B(); // 에러 없음 } }
3. 아예 내부 클래스를 선언하지 말고 A 클래스 외부에다가 따로 B 클래스를 선언한다.
public class A { public void C() { B b = new B(); // 에러 없음 } } class B { }
예전에 학원에서 자바를 배울 때 내부 클래스는 쓰지 말라고 했던 기억이 났다.
왜 쓰지 말라고 했는지는 잘 기억나지 않지만, 저런 문제 때문에 있지 않나 싶다.
뭐 아직까진 굳이 내부 클래스를 선언해야 할 필요성도 모르겠고...
반응형