자바 No enclosing instance of type ... is accessible 컴파일 오류 수정

자바(JAVA)

자바 No enclosing instance of type ... is accessible 컴파일 오류 수정

 

 환경: Eclipse Mars, Android 4.2.2

 

아래 오류는 static 함수에서 참조하려는 클래스가 닫혀 있어 접근을 하지 못한다는 오류입니다. 보통 내부에 있는 클래스를 static 함수가 참조할 때 에러가 납니다.

 

No enclosing instance of type Myani is accessible. Must qualify the allocation with an enclosing instance of type Myani (e.g. x.new A() where x is an instance of Myani).

 

Static 변수가 붙은 변수나 클래스는 클래스가 메모리에 올라갈 때 자동으로 생성이 됩니다. 아래와 같은 경우 Myani 가 생성되기 전에 Anidog 클래스를 사용하기 때문입니다. 상위 클래스에 포함된 하위 클래스는 미리 생성하고 나서 사용이 가능합니다.

 

public class Myani {
		
	class Anidog {
		String kind;
		int age;
		String name;
		
		Anidog(){
			
		}
		public void print(){
			
		}
	}
		
	public static void main(String[] args) {
		Anidog ad = new Anidog();
		ad.kind = "강이지";
		ad.age = 1;
		ad.name = "소리";
		ad.print();

	}
}

 

▼ 이 문제를 해결하기 위해서는 하위 클래스에 static 을 붙여 미리 생성해 두면 되겠죠. 그럼 정상적으로 작동하게 됩니다.

public class Myani {
		
	static class Anidog {
		String kind;
		int age;
		String name;
		
		Anidog(){
			
		}
		public void print(){
			
		}
	}
		
	public static void main(String[] args) {
		Anidog ad = new Anidog();
		ad.kind = "강이지";
		ad.age = 1;
		ad.name = "소리";
		ad.print();

	}
}

 

▼ 또 다른 방법은 포함관계를 벗어나서 클래스를 밖으로 꺼내는 것입니다. 두개의 클래스 파일을 만들어도 되겠죠.

class Anidog {
	String kind;
	int age;
	String name;

	Anidog() {

	}

	public void print() {
	}
}

public class Myani {

	public static void main(String[] args) {
		Anidog ad = new Anidog();
		ad.kind = "강이지";
		ad.age = 1;
		ad.name = "소리";
		ad.print();
	}
}
저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군