以前可能有人问过这个问题,但快速搜索只提出了与 C# 相同的问题。看这里。 https://stackoverflow.com/questions/410227/test-if-object-implements-interface
我基本上想做的是检查给定对象是否实现给定接口。
我想出了一个解决方案,但这不够舒服,无法在 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;
}
EDIT: Ok, thanks for your answers. Especially to Damien Pollet and Noldorin, you made me rethink my design so I don't test for interfaces anymore.
The instanceof http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2操作员的工作是在NullPointerException https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html安全的方式。例如:
if ("" instanceof java.io.Serializable) {
// it's true
}
产生 true。自从:
if (null instanceof AnyType) {
// never reached
}
产生假,则instanceof
运算符是 null 安全的(您发布的代码不是)。
实例化是内置的、编译时安全的替代方案类#isInstance(对象) http://java.sun.com/javase/6/docs/api/java/lang/Class.html#isInstance(java.lang.Object)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)