반응형

출처: 자바의 정석 - 남궁 성, 도우출판

        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 {

}


예전에 학원에서 자바를 배울 때 내부 클래스는 쓰지 말라고 했던 기억이 났다.

왜 쓰지 말라고 했는지는 잘 기억나지 않지만, 저런 문제 때문에 있지 않나 싶다.

뭐 아직까진 굳이 내부 클래스를 선언해야 할 필요성도 모르겠고...

반응형
Posted by 애콜라이트
l

free counters