在检查当前类的实例时,为什么"x instanceof getClass()"不起作用?

Rad*_*ugh 2 java inheritance instanceof

我有一个抽象类AssociativeFunction,它扩展了Expr.有不同的函数是AssociativeFunction的子类,还有其他表达式是Expr的子类,但不是AssociativeFunction.

在AssociativeFunction类中的方法中,我需要检查Expr对象是否是当前类或其子类之一的实例,

即Product(扩展AssociativeFunction)并继承此方法; 因此,对于所有Product对象和所有CrossProduct(extends Product)对象,检查应返回true,但对于所有Sum(扩展AssociativeFunction)和Number(扩展Expr)对象,则返回false.

  1. 为什么以下不起作用?如何使用instanceof运算符使其工作?如果我不能,为什么不呢?

    if (newArgs.get(i) instanceof getClass()) {
    
    Run Code Online (Sandbox Code Playgroud)

    Eclipse产生错误:

    令牌"instanceof",== expected)上的语法错误

  2. 这段代码似乎有用,这是正确的吗?为什么它与(1)不同?

    if (getClass().isInstance(newArgs.get(i))) {
    
    Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

为什么以下不起作用?

因为instanceof在编译时需要一个类型名称作为第二个操作数,基本上.您将无法使用该instanceof运营商.

运营商生产instanceof是:

RelationalExpression instanceof ReferenceType

其中ReferenceTypeClassOrInterfaceType,TypeVariableArrayType ...换句话说,是一个类型名称,而不是一个计算结果的表达式Class<?>.你正在做的有点像尝试声明一个类型为"当前类"的变量 - 语言就是没有这样定义的.

这段代码似乎有用,这是正确的吗?

是.

为什么它与(1)不同?

因为它使用的是Class.isInstance 方法,而不是instanceof 运算符.他们只是不同的东西.该isInstance方法实际上是更动态的版本.