2012-02-17 3 views
2

Guice의 Types 라이브러리를 사용하여 ParameterizedType을 생성하려고합니다. Butler은 내부 클래스 또는 내부 인터페이스입니다. following과 같은 코드를 사용하면 "묶인 인터페이스에 소유자 유형이 없습니다"라는 오류 메시지가 나타납니다. 왜?"동봉 된 인터페이스의 소유자 유형 없음"오류는 무엇을 의미합니까?

private Butler<Person> findButler(Person person, Injector injector){ 
    Class<? extends Person> personClass = person.getClass(); 

    ParameterizedType parameterizedButler = 
    Types.newParameterizedType(Butler.class, personClass); 

    Key<?> key = Key.get(parameterizedButler); 
    Butler<Person> butler = (Butler<Person>) injector.getInstance(key); 
    return butler 
} 

답변

3

당 샘 베를린의 answer는 "하위 인터페이스에 대한 어떠한 소유자 유형은"오류 [이 경우] 버틀러는 내부 클래스 인 경우, 당신은 three-argument newParameterizedTypeWithOwner method을 사용하고 외부 클래스를 통과해야한다는 의미 owner [first] 인수.

private Butler<Person> findButler(Person person, Injector injector){ 
    Class<? extends Person> personClass = person.getClass(); 

    ParameterizedType parameterizedButler = 
    Types.newParameterizedTypeWithOwner(ButlersOuter.class, Butler.class, personClass); 

    Key<?> key = Key.get(parameterizedButler); 
    Butler<Person> butler = (Butler<Person>) injector.getInstance(key); 
    return butler 
} 
:

그래서 올바른 코드는 다음과 같을 것