Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

자바(JAVA)
반응형

아래 오류는 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 녹두장군1
,