调用在其支持类中实现的类的方法



我有一个类javaProductManager,它扩展了另一个同名的类,位于另一个项目中,带有另一个包("com.services")。

我必须调用位于超级类中的方法deleteProduct(Long-productId)。

try{
   Object service = CONTEXT.getBean("ProductManager");
   Method method = service.getClass().getDeclaredMethod("deleteProduct", Long.class);
   method.invoke(service, productId);
} catch(Exception e){
   log.info(e.getMessage());
}

我无法删除产品:我得到这个信息:

com.franceFactory.services.ProductManager.deleteProduct(java.lang.Long)

产品未被删除:(

各种getDeclaredMethod()getDeclaredMethods()只返回在当前类实例上声明的方法。来自javadoc:

这包括公共、受保护、默认(包)访问和私有方法,但不包括继承的方法。

这里的重要部分是"但不包括继承的方法"。这就是为什么您的代码当前出现异常的原因,它没有从父类返回deleteProduct()方法。

相反,如果您想继续使用反射,则需要使用getMethod方法,因为它返回所有公共方法,"包括由类或接口声明的方法以及从超类和超接口继承的方法。"

如果必须使用反射,则不要使用getDeclaredMethod(),因为(正如其名称所示)它只能返回在当前类中声明的方法,而您声称要调用在其他类中声明的方法(确切地说,在超类中声明)。

要获得公共方法(包括继承的方法),请使用getMethod()

如果您要重写该方法,只需使用保留字super(来自Oracle文档):

public class Superclass {
    public void printMethod() {
        System.out.println("Printed in Superclass.");
    }
}
public class Subclass extends Superclass {
    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod(); // This calls to the method defined in the superclass
        System.out.println("Printed in Subclass");
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

此代码将写入:

采用特级印刷。

在子类中打印

在其他情况下(您不是覆盖它,而是使用它),只需编写this.methodName(...)。所有继承的方法都是直接可用的。

免责声明:我不确定我是否完全理解你的问题。我仍然会努力回答我认为我理解的问题。

com.franceFactory.services中的Product(我们称之为A)扩展包com.services中的Product类(我们称之为B

所以A扩展了B。

B具有方法deleteProduct(java.lang.Long)

A覆盖方法deleteProduct(java.lang.Long)

您有类A的实例。因此,通过OOPS概念方法,将调用对象A的deleteProduct

除非你有B类的实例,否则你不可能从外部调用超级方法。

编辑

OP澄清yes, it's public, but it isn't overridden in my class

super中的方法在这里被调用。由于方法上所写内容的原因,产品不会被删除。

相关内容

  • 没有找到相关文章

最新更新