我尝试使用Guice的ParameterizedType
库生成Types
。 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
}
答案 0 :(得分:3)
Per Sam Berlin的answer,“封闭界面的所有者类型”错误意味着如果[在这种情况下] Butler是内部类,则需要使用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
}