2010-12-31 3 views
1


Google Guice의 소스를 살펴보고 익숙하지 않은 코드 조각을 발견했습니다. 누군가가 그것을 명확히 할 수 있다면 그것은 훌륭한 학습이 될 것입니다.Java : 인터페이스의 내부 클래스 (google guice에서)

내부 클래스에 대한 기본적인 이해가 있습니다. 구현 세부 사항을 공용 인터페이스에 가깝게 유지합니다. 그렇지 않으면 내부 클래스가 네임 스페이스를 오염시킬 수 있습니다.

이제 I는 다음 라인 at

public static final Scope SINGLETON = new Scope() { 
    public <T> Provider<T> scope(final Key<T> key, final Provider<T> creator) { 
     return new Provider<T>() { 
......... 
} 

이는 정적 변수 내부 클래스 인스턴스를 할당 볼 수 있지만, 적용 범위 (at)

공용 인터페이스 범위

로 정의되는 인터페이스

파트 1 :

인터페이스를 인스턴스화 할 수 있습니까 ?? 또는 인터페이스의 익명 구현을위한 간결한 구문입니까 ??

제 2 부 :

사람이 저자는 위의 여러 중첩 클래스 (범위 및 공급자)에 의해 의도, 그리고이 방법을 구현하는 말이 왜, 그것은에 저를 도움이 무엇인지 설명 할 수있는 경우

알다. 감사.

+0

가능한 복제 [인터페이스에서 개체를 만드는 것으로 보입니다. 어떻게 작동합니까?] (http://stackoverflow.com/questions/3947708/this-appears-to-create-an-object-from-an-interface-how-does-it-work) –

+0

@Bert, 동의 함 ,이 질문은 guice에 국한된 것이 아니라 일반적인 Java 질문입니다. –

+0

@Mike - 좋은 눈 - 장래의 수색자를 위해 업데이트 된 태그 –

답변

2

{} -block은 주어진 인터페이스를 구현하는 익명의 내부 클래스를 만듭니다.

Runnable으로 자주 표시됩니다.

+0

내 가정을 확인하는 명확한 설명을 해주셔서 감사합니다. qn에 정확하게 표시 한 부분에 대한 포인터를 줄 수 있습니까? ur 시간 동안 다시 고마워. – bsr

+0

호출 후에 컴파일러에서 보았을 때 'Scope'이고 다른 것으로 캐스트 할 수 없으므로 (예 : 사용할 수있는 이름이 없음) 해당 코드 만 사용할 수 있습니다. 그 이유는 단순히 공급자를 반환하는 범위가 필요하며 작성자는 이러한 이름 지정 구현 중 하나를 제공 할 이유가 없음을 알기 때문입니다. 아마 그것 때문에 간단합니다. –

2

인터페이스를 인스턴스화 할 수 있습니까? 또는 인터페이스의 익명 구현을위한 간결한 구문입니까?

넵. 사람이 저자가

위의 여러 중첩 된 클래스에 의해 의도 무엇인지 설명 할 수있는 경우

This appears to create an object from an interface; how does it work?

What does the syntax mean in Java: new Stream<Integer>(){ ... }?

예 3.11 http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm

public java.util.Enumeration enumerate() { 
    // The anonymous class is defined as part of the return statement 
    return new java.util.Enumeration() { 
     .... 
    }; // Note the required semicolon: it terminates the return statement 
} 

에서 열거 인터페이스를 인스턴스화

중첩에 특별한 것은 없습니다. 둘 다 익명 클래스이며 다른 곳에서는 익명 클래스를 사용하는 동일한 이유로 익명 클래스를 사용합니다. 인터페이스 또는 하위 클래스에 대한 일회용 구현이있는 경우 즉 정의/구현에서 사용.

관련 문제