The error you are getting is because your generic is using improper bounding.
Change your method declaration to:
public static <T extends IFoo2> T convert(IFoo1 foo1, Class<T> clz) {
T foo2 = clz.newInstance();
....
return foo2;
}
There is another type of bounding you may have been thinking of. I recommend reading this SO question: Understanding upper and lower bounds on ? in Java Generics
solved Convert one object to another using generics [closed]