public interface A {}
public interface B {}
public class Test implements A{}
public class Test2 {}
Я создал метод, который проверяет, реализует ли класс интерфейс. Я хочу, чтобы мой метод принимал только общие c интерфейсы, а не все объекты классов.
метод
public static boolean containsInterface(Class clazz, Class intf)
{
try
{
Validate.isTrue(intf.isInterface());
if(clazz.isInterface())
return JavaUtil.isClassExtending(intf, clazz);
for(Class c : ClassUtils.getAllInterfaces(clazz))
{
if(JavaUtil.isClassExtending(intf, c))
return true;
}
}
catch(Throwable t)
{
t.printStackTrace();
}
return false;
}
Поскольку Test.class & Test2.class не являются интерфейсами для параметра 2d, я хочу, чтобы он имел ошибку компиляции, поскольку параметр 2d должен быть интерфейсом класса
containsInterface(Test.class, Test.class);
containsInterface(Test.class, Test2.class);
допустимое использование моего метода
containsInterface(Test2.class, A.class);
containsInterface(Test.class, B.class);
то, что я пытался
public static boolean containsInterface(Class clazz, Class<? extends Interface> intf)
В настоящее время я проверяю, является ли класс в параметре интерфейсом, затем выдает исключение. Я бы предпочел заставить людей не иметь возможности вызывать метод для начала, если это не интерфейс
Мне известны аннотации и объекты Enum, доступные для использования в качестве сигнатуры класса, чтобы убедиться, что люди используют параметры правильные, но я не могу найти тот, который подходит для самого интерфейса.
Мне сказали, что дженерики не поддерживают интерфейсы или тип абстрактных классов, это так даже в jre 9-13 +