“没有所有者类型的封闭接口”guice错误是什么意思?

时间:2012-02-17 05:35:42

标签: java types guice inner-classes nested-class

我尝试使用Guice的ParameterizedType库生成TypesButler是内部类或内部接口。当我使用像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
}

1 个答案:

答案 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
}