<my reference>를 포함하는 엔 클로징 인스턴스가 필요합니다.


92

포함하는 엔 클로징 인스턴스가 필요합니다.

아래는 코드입니다. positionObj내가 사용하려는 객체이며 위의 오류가 발생합니다.

이유는 불분명합니다.

package toolBox;
import toolBox.Secretary.positionObj;    

public class PositionManagement {
    public static HashMap<String, Secretary.positionObj> main(String vArg){
        positionObj newPosition=new positionObj();
    }
}

답변:


130

positionObj인스턴스가없는 비 정적 내부 클래스 를 사용하려고 Secretary합니다.
비 정적 내부 클래스는 부모 클래스의 인스턴스에 속해야합니다.

positionObj일반 클래스 또는 정적 내부 클래스로 변경해야합니다 .

또는 someSecretary.new positionObj()인스턴스에 속하는 내부 클래스의 인스턴스를 작성하도록 작성할 수 있습니다 someSecretary.


동의했지만이 일반적인 진술은 약간 불분명합니다. 예를 들어 주거나 ​​이것을 더 잘 설명 할 수있는 곳을 알려줄 수 있습니까? 감사합니다
jason m

예. 나는 내 positionObj를 정적으로 만들면 (비서 클래스에서) 작동한다는 것을 디버깅하려고 할 때 깨달았습니다. 나는 행복하고 이제 모든 것이 작동하지만 포인터에 감사드립니다. 이 오류의 실제 원인을 조사합니다.
jason m

2
오류의 실제 원인은 부모 인스턴스를 제공하지 않았기 때문입니다. 실제로 필요하지 않고 작동 방식을 이해 하지 않는 한 비 정적 내부 클래스를 사용하지 마십시오 . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks

두 솔루션 모두 완벽하게 작동합니다 [1- positionObj 클래스를 정적으로 만들고 2- OuterClass.new classObj () 사용]. 감사합니다
jason m

예. 그러나 어떤 것이 올바른지 파악할 수있을만큼 코드베이스를 충분히 이해해야합니다.
SLaks

17

먼저 Outer 클래스의 객체를 만듭니다. 이 경우는 "비서"라고 생각합니다. 그런 다음 positionObj를 만듭니다. 이렇게

Secretary x = new Secretary();
Secretary.positionObj y = x.new positionObj();

감사합니다! ... 저는 v 1.0부터 Java를 사용해 왔지만 그렇게 할 수 있는지 몰랐습니다!
Richard T

0

올바른 일반 서명은 다음과 같습니다.

public static HashMap<String, positionObj> main(String vArg)

이미 가져 오기 때문에 positionObj를 한정 할 필요가 없습니다.

그러나 주요 방법이 아래 서명을 준수해야한다고 확신합니다. main이 프로그램의 주요 메소드가되도록하려면 서명을 다음과 같이 변경하십시오.

 public static void main(String[] args) {...}

Map을 반환하고 main에서 호출하는 별도의 정적 메서드를 만들 수 있습니다.

참고로 모든 클래스는 대문자 positionObj로 시작해야하며 PositionObj 여야합니다.


이봐, 코드를 빠뜨 렸어. 사건에 대해 동의했습니다. 수업은 무언가를 반환하지만 오류가 여기에 있으며 이유가 명확하지 않습니다.
jason m

@jason, 나는 당신이 메인에서 아무것도 반환 할 수 있다고 생각하지 않습니다.
hvgotcodes 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.