问题
之前可能已经提出过这个问题,但快速搜索只提出了同样的问题C#.See here.
我基本上想要做的是检查给定对象是否实现了给定的接口。
我有点想出一个解决方案,但是在if或case语句中经常使用它并不够舒服,我想知道Java没有内置解决方案。
public static Boolean implementsInterface(Object object, Class interf){
for (Class c : object.getClass().getInterfaces()) {
if (c.equals(interf)) {
return true;
}
}
return false;
}
编辑:好的,谢谢你的回答。特别是Damien Pollet和Noldorin,你让我重新考虑我的设计,所以我不再测试接口了。
#1 热门回答(167 赞)
Theinstanceof
operator以aNullPointerException
safe方式完成工作。例如:
if ("" instanceof java.io.Serializable) {
// it's true
}
收益真实。以来:
if (null instanceof AnyType) {
// never reached
}
产生错误,theinstanceof
operator是null安全的(你发布的代码不是)。
instanceof是内置的编译时安全替代Class#isInstance(Object)
#2 热门回答(40 赞)
这应该做:
public static boolean implementsInterface(Object object, Class interf){
return interf.isInstance(object);
}
例如,
java.io.Serializable.class.isInstance("a test string")
评估为true
。
#3 热门回答(7 赞)
我更喜欢instanceof
:
if (obj instanceof SomeType) { ... }
这比0332820991更常见和可读