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