2012-01-11 5 views
1

here에서 촬영, 왜이 구문은 유효합니다 :이 구문이있는 경우 (new Foo().new Bar()는) 유효한Java에서이 구문이 유효한 이유는 무엇입니까?

class X { 
    class Y { 
    Y(T a, Z b) {...} 
    } 

    public static void main(String... args) { 
    // why is this valid? the second new looks confusing to me 
    X<String>.Y<String> x1 = new X<String>().new Y<String>("",""); //ok 
    } 
} 

을하고 있기 때문에?

답변

4

Since Java 1.1, apparently (감사합니다 @emory)

클래스 "Y"는 (는) 클래스 "X"의 비 정적 인 nested (inner) class입니다. 따라서 클래스 "Y"의 모든 인스턴스는 클래스 "X"의 "외부"인스턴스로 구성되어야합니다. supporr은 "내부 클래스 선언"http://blogs.oracle.com/darcy/entry/nested_inner_member_and_top

+0

하지만 'new'연산자가 아닌가요? 이 구문은'Foo'의 메소드처럼 보입니다. –

+0

좋아, 그 링크에 언급되어 있습니다. 그러나 그것이 내가 수년 동안 이것을 보지 않고 있었기 때문에 유약이다! 한숨! –

+0

이 문서는 http://www.public.iastate.edu/~java/docs/guide/innerclasses/html/innerclasses.doc.html에 나와 있습니다. 1.1 이전에는 java에 내부 클래스가 없었습니다. – emory

1

Bacause 자바 :

도 잘 중첩 클래스를 설명하는이 문서를 참조하십시오. 즉, 이름을 가질 수있는 다른 클래스 안에 클래스를 정의 할 수 있습니다 (코드의 경우 Y는 X 클래스의 내부 클래스 임). 이제 "new Foo(). newBar()"라고 쓰면 Foo의 객체를 먼저 검게 만들고 생성 될 때 Bar 객체 (내부 클래스로 정의 됨)를 만들면 결과는 Bar 객체가 반환됩니다. .

관련 문제