之前可能已经提出过这个问题,但快速搜索只会提出与C#相同的问题.看这里.
我基本上想要做的是检查给定对象是否实现了给定的接口.
我有点想出了一个解决方案,但是在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;
}
Run Code Online (Sandbox Code Playgroud)
dfa*_*dfa 178
该instanceof运营商确实在工作NullPointerException安全的方式.例如:
if ("" instanceof java.io.Serializable) {
// it's true
}
Run Code Online (Sandbox Code Playgroud)
收益真实.以来:
if (null instanceof AnyType) {
// never reached
}
Run Code Online (Sandbox Code Playgroud)
产生false,instanceof运算符是null安全的(你发布的代码不是).
instanceof是Class#isInstance(Object)的内置编译时安全替代品
Luk*_*ard 41
这应该做:
public static boolean implementsInterface(Object object, Class interf){
return interf.isInstance(object);
}
Run Code Online (Sandbox Code Playgroud)
例如,
java.io.Serializable.class.isInstance("a test string")
Run Code Online (Sandbox Code Playgroud)
评估为true.
我更喜欢instanceof:
if (obj instanceof SomeType) { ... }
Run Code Online (Sandbox Code Playgroud)
这比它更常见和可读 SomeType.isInstance(obj)