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.
为什么以下不起作用?如何使用instanceof运算符使其工作?如果我不能,为什么不呢?
if (newArgs.get(i) instanceof getClass()) {
Run Code Online (Sandbox Code Playgroud)
Eclipse产生错误:
令牌"instanceof",== expected)上的语法错误
这段代码似乎有用,这是正确的吗?为什么它与(1)不同?
if (getClass().isInstance(newArgs.get(i))) {
Run Code Online (Sandbox Code Playgroud)为什么以下不起作用?
因为instanceof在编译时需要一个类型名称作为第二个操作数,基本上.您将无法使用该instanceof运营商.
RelationalExpression
instanceofReferenceType
其中ReferenceType是ClassOrInterfaceType,TypeVariable或ArrayType ...换句话说,是一个类型名称,而不是一个计算结果的表达式Class<?>.你正在做的有点像尝试声明一个类型为"当前类"的变量 - 语言就是没有这样定义的.
这段代码似乎有用,这是正确的吗?
是.
为什么它与(1)不同?
因为它使用的是Class.isInstance 方法,而不是instanceof 运算符.他们只是不同的东西.该isInstance方法实际上是更动态的版本.