测试对象是否实现了接口

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

这可能以前也有人问过,但是快速搜索只会引出与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;
}

提问于
用户回答回答于

instanceof操作符在NullPointerException,例如:

 if ("" instanceof java.io.Serializable) {
     // it's true
 }

结果是真的。因为:

 if (null instanceof AnyType) {
     // never reached
 }

产生错误,instanceof运算符是空安全的

用户回答回答于

这应该可以做到:

public static boolean implementsInterface(Object object, Class interf){
    return interf.isInstance(object);
}

例如,

 java.io.Serializable.class.isInstance("a test string")

评估为true

扫码关注云+社区