Вы можете попробовать
ParameterizedType type = (ParameterizedType) Bar.class.getGenericSuperclass();
System.out.println(type.getRawType()); // prints; class Foo
Type[] actualTypeArguments = type.getActualTypeArguments();
System.out.println(actualTypeArguments[0]); // prints; class java.lang.Integer
Это работает только потому, что Bar - это класс, который расширяет определенный Foo.Если вы объявите переменную, подобную следующей, вы не сможете определить тип параметра intFoo во время выполнения.
Foo<Integer> intFoo = new Foo<Integer>();