java:与Method.getClass()混淆.getMethod.invoke这里的操作

时间:2012-02-27 09:33:46

标签: java

我有一个类Child和class Parent,如下所示

请参阅下面这两个类的语法。

class Child extends Parent 
{
Response resp = new Response();
if(2<3)
{
resp = performSomeAction();
}
}


class Parent
{
protected Response performSomeAction() throws Exception {
        Method action = null;
        action = getClass().getMethod(request.action, null);
        return (Response) action.invoke(this, null);
    }
}

我在这里很困惑,有人可以让我知道这里的班级逻辑是什么? 请问有谁请让我知道它到底在做什么?

请分享您的观点。非常感谢你 。

2 个答案:

答案 0 :(得分:1)

您的Parent类调用request.action定义的方法(无参数)。此方法可以在ParentChild或两个类中定义(然后调用Child中定义的overriden方法)。我们无法帮助您,因为您的代码不可执行也不一致。

答案 1 :(得分:0)

这是使用Reflection。 (据我所知,与子类化或你的Child类无关......)

要点是在运行时获取对特定方法(基于其名称)的引用,并动态调用它。 (通常,您将在代码中具体使用一种可编译到类文件中的具体方法。)

在这种情况下,Request上有一个名为action的字段,它描述了要采取的操作 - 并且处理类中必须有相应的no-args方法具有相同的名称。这可以通过调用类getMethod,然后调用以下行来找到。

请注意,由于调用getClass(),这些方法不一定需要直接存在于Parent类中;只要正确的子类正在处理相关的消息,它们就可以存在于子类中。