public interface A {}
public interface B {}
public class Test implements A{}
public class Test2 {}
我做了一个方法来检查一个类是否实现了一个接口。我希望我的方法只接受通用接口而不是所有类对象。
方法
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)
我目前检查参数中的类是否是接口然后抛出异常。如果它不是接口,我宁愿强迫人们不能调用该方法开始
我知道 Annotations 和 Enum 对象可用作类签名,以确保人们正确使用参数,但我似乎找不到接口本身的参数。
有人告诉我泛型不支持接口或抽象类类型即使在 jre 9-13+ 中也是如此