В чем разница между передачей в универсальном параметре некоторого универсального класса с и без его универсального параметра?
Пример:
Простой родовой класс:
public class Foo<T> { /*...*/ }
Простой класс, который расширяет простой универсальный класс, устанавливая универсальный параметр в некоторый нерелевантный тип:
public class FooFoo extends Foo<Type1> { /*...*/ }
Еще один общий класс
public class Bar<T> extends FooFoo { /*...*/ }
Наш базовый класс, которому в качестве универсального параметра требуется нечто, расширяющее класс Foo
public class TestFooClass<T extends Foo<?>> { /*...*/ }
И вопрос, в чем разница между этими двумя параметрами
public class BarTestOne extends TestFooClass<Bar> { /*...*/ }
public class BarTestTwo extends TestFooClass<Bar<?>> { /*...*/ }
Задача
Class<T> class = (Class<T>) ((Foo)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
В первом случае код работает, во втором - нет.