2011-08-16 5 views
5

Eclipse와 Java를 처음 사용했습니다.Eclipse 빌드 오류

Eclipses 컴파일러 또는 설치시 다음 오류가 발생하는지 궁금합니다.

서비스 클래스의 반환 형식을 정의하기 위해 public 클래스 내에 public 클래스를 정의했습니다. 나는이 returnType이를 인스턴스화 할 서비스 방법은 기본 메시지 잡아 호출 클래스에서

public class ServiceThing { 
    public class ReturnType {...} 
    public ReturnType serviceMethod (...) {...} 
    ... 
} 

:

ReturnType returnType = new ReturnType(...); 

을 시도이를 구축 할 때 내가 얻을 다음과 같은 오류 :

건물 작업 영역 : 빌드하는 동안 오류가 발생했습니다. 'XXXX.android'프로젝트에서 'Java Builder'빌더를 실행하는 중 오류가 발생했습니다. java.lang.ArrayIndexOutOfBoundsException

저장 실패 : 저장 실패;

ServiceThing serviceThing = ...; 
ReturnType returnType = serviceThing.new ReturnType(...); 

그러나 컴파일러 어쨌든 NullPointerException이 발생하지 않아야 java.lang.NullPointerException이

내가 필요한 구문은 것을 알아 냈다. 당신이 그것을가 예상대로 작동합니다 당신이 부모 인스턴스에 대한 참조를 제거하는 public static class하고

ReturnType returnType = new ReturnType(...); 

ReturnType함으로써

+0

공개 수업 내에서 왜 공개 수업이 필요한지 묻습니다. 공개적으로라면, 그것을 독립된 수업으로 만들어 보지 않겠습니까? – Gapton

+1

수업의 의도를 강력히 나타내는 것입니다. 그것은 서비스 호출의 반환 유형에 사용되는 순전히 ment입니다. 내가 스파르타 파일에 넣으면 나는 혼란 스럽기 때문에 지저분 해 보일 것이라고 생각한다. – bitestar

답변

4

.

static 수정자를 사용하지 않으면 하위 클래스의 인스턴스에 부모 개체에 대한 암시 적 참조가 포함됩니다. 이 경우에 ReturnType의 인스턴스를 작성하려면 ServiceThing 인스턴스가 필요한 이유입니다.

+0

좋은 대답. 이 솔루션은 실제로 Item 22 : nonstatic에 비해 정적 멤버 클래스를 선호하는 [Effective Java, Second Edition] (http://java.sun.com/docs/books/effective/)에서 보증됩니다. 필자는 여전히 컴파일러가이 오류 메시지를 작성해야한다고 생각합니다. 둘러싸는 인스턴스없이 nonstatic 멤버 클래스의 인스턴스를 만드는 것은 불가능합니다. – bitestar