Что означает ошибка «Нет типа владельца для закрытого интерфейса»? - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь сгенерировать ParameterizedType, используя библиотеку Guice's Types. Butler - это внутренний класс или внутренний интерфейс. Когда я использую код, такой как , следующий за , я получаю сообщение об ошибке «Нет типа владельца для закрытого интерфейса». Почему?

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 Ответ

3 голосов
/ 17 февраля 2012

В ответе Сэма Берлина ошибка «Нет типа владельца для закрытого интерфейса» означает, что если [в данном случае] Батлер является внутренним классом, вам необходимо использовать аргумент Метод newParameterizedTypeWithOwner и передача внешнего класса в качестве аргумента 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
}
...