作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public interface A {}
public interface B {}
public class Test implements A{}
public class Test2 {}
我创建了一个方法来检查一个类是否实现了一个接口(interface)。我希望我的方法只接受通用接口(interface)而不是所有类对象。
方法
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 参数的接口(interface),我希望它有一个编译错误,因为 2d 参数必须是一个接口(interface)类
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)
我目前检查参数中的类是否为接口(interface)然后抛出异常。如果不是接口(interface),我宁愿强制人们不能调用方法开始
我知道注释和枚举对象可用作类签名以确保人们正确使用参数,但我似乎无法找到接口(interface)本身的对象。
我被告知泛型不支持接口(interface)或抽象类类型,即使在 jre 9-13+ 中也是如此
最佳答案
您不能使用类型控制系统将参数强制为任何接口(interface)实现。如果您只想强制执行 Class<?>
,同样适用。与 abstract
修饰符。我不确定是否真的需要做简单类型 isInterface
断言是
JDK 工程师也不关心这个。作为这种机制的一个完美示例(但没有)是 JDK 动态代理创建。您只能创建接口(interface)(或接口(interface)集)的代理,但不能创建类的代理。
我不认为编写自己的预处理器是值得的。此外,它不是通用的——因为你假设运行时类型必须在编译时知道——动态加载的类等呢?
关于Java 泛型类 < ?扩展接口(interface) > 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59745609/
我是一名优秀的程序员,十分优秀!