В типе Foo T стирается для объекта. Таким образом, метод интерфейса
void doSomethingWith(Object t)
Когда вы определяете Bar как реализующий Foo , вы получаете два метода, включая метод синтетического моста, сгенерированный компилятором, который принимает тип Object.
void doSomethingWith(Object t) {
doSomethingWith((String)t);
}
Но что касается сервисов OSGi, тип сервиса, зарегистрированный под именем Foo, это просто Foo, и любой класс, который его реализует, должен иметь метод doSomethingWith (Object t). Для платформы или Декларативной службы нет способа (кроме определения и использования некоторых свойств службы) понять, что реализация службы (например, Bar) определила T как String.