gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:05:39 25 4
gpt4 key购买 nike

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

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

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

  • 为什么以下不起作用?我怎样才能使用 instanceof 让它工作?运算符(operator)?如果我不能,为什么不呢?
    if (newArgs.get(i) instanceof getClass()) {

    Eclipse 产生错误:

    Syntax error on token "instanceof", == expected )

  • 这段代码似乎有效,对吗?为什么它与(1)不同?
    if (getClass().isInstance(newArgs.get(i))) {
  • 最佳答案

    Why does the following not work?



    因为 instanceof基本上需要一个类型名称作为编译时的第二个操作数。您将无法使用 instanceof运算符(operator)。

    production for the instanceof operator是:

    RelationalExpression instanceof ReferenceType



    哪里 ReferenceType是 ClassOrInterfaceType、TypeVariable 或 ArrayType... 换句话说,是类型名称而不是计算结果为 Class<?> 的表达式引用。你所做的有点像试图声明一个类型为“当前类”的变量——语言只是没有那样定义。

    This code seems to work, is that correct?



    是的。

    Why is it different than (1)?



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

    关于java - 检查当前类的实例时,为什么 "x instanceof getClass()"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024182/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com