반응형
자바 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();
}
}
반응형
댓글을 달아 주세요
12 2018.12.01 23:55 댓글주소 수정/삭제 댓글쓰기
고맙습니다
11 2021.01.05 10:07 댓글주소 수정/삭제 댓글쓰기
고맙습니다.
감사합니다. ^^