2012-02-17 46 views
2

我試圖使用Guice的Types庫生成ParameterizedType庫。 Butler是一個內部類或內部接口。當我使用類似following的代碼時,出現錯誤「封閉接口沒有所有者類型」。爲什麼?「封閉接口的所有者類型」guice error是什麼意思?

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並通過外部類的主人[第一]論點。

所以正確的代碼會是這個樣子:

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 
}