Ответ 1
Обобщенные, как ни странно, используйте extends
для интерфейсов. 1 Вы хотите использовать:
public class Foo<T extends SomeInterface>{
//use T as you wish
}
Это на самом деле требование для реализации, а не проверка истина/ложь.
Для проверки подлинности/ложного использования используйте неограниченные генерики (class Foo<T>{
) и убедитесь, что вы получили Class<T>
, чтобы у вас был тип, который можно использовать:
if(SomeInterface.class.isAssignableFrom(tClazz));
где tClazz
- параметр типа java.lang.Class<T>
.
Если вы получите параметр типа, подлежащего декларированию, то это не более чем:
if(tParam instanceof SomeInterface){
но это не будет работать только с общим объявлением.
1 Если вы хотите потребовать расширения класса и нескольких интерфейсов, вы можете сделать следующее: <T extends FooClass & BarInterface & Baz>
Класс (только один, поскольку нет множественного наследования в Java) должен идти первым, и любые интерфейсы после этого в любом порядке.