为什么不能将“类”变量传递给 instanceof?

2022-08-31 10:18:32

为什么这段代码不能编译?

    public boolean isOf(Class clazz, Object obj){
        if(obj instanceof clazz){
            return true;
        }else{
            return false;
        }
    }

为什么我不能将类变量传递给 ?instanceof


答案 1

运算符适用于引用类型(如 ),而不适用于对象(如 )。你可能想要类似的东西instanceofIntegernew Integer(213)

clazz.isInstance(obj)

附注:如果你写,你的代码会更简洁

public boolean isOf(Class clazz, Object obj){
    return clazz.isInstance(obj)
}

虽然不太确定你是否需要一种方法。


答案 2

instanceof只能与显式类名一起使用(在编译时声明)。为了进行运行时检查,您应该执行以下操作:

clazz.isInstance(obj)

这有一个小优势,因为它可以更好地处理案件。clazz.isAssignableFrom(..)obj == null