2012-02-17 45 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 
}