根据Java中的类使用不同的方法

时间:2015-03-10 17:03:43

标签: java class reflection methods

我试图减少一些代码重复。目前我有两种几乎完全相同的方法,主要区别是在其中调用两种不同的方法。

以下基本上我想做的事情:

private void combinedMethod(StandardClass sc, MyClass mc)
{
    Method m = null;
    if(mc instanceof MySubClass1)
        m = sc.RelevantFor1();
    if(mc instanceof MySubClass2)
        m = sc.RelevantFor2();

    m(mc.getA(), mc.getB());
}

我已经使用反射测试了(并且它可以工作)。但是有更好的方法吗?我读到某处反射很慢,只能用作最后的手段。在这种情况下呢?

同样在这种情况下,StandardClass是java api中的标准类。我发送的课程是我自己制作的。

1 个答案:

答案 0 :(得分:3)

目前还不清楚这些方法究竟是什么样的,或者它们在做什么,但它似乎是一个完美的多态性案例。您可以在超类中创建一个方法 - MyClass我想在这种情况下。并覆盖子类中的这些方法。

现在,当您在MyClass引用上调用该方法时,将根据实际实例调用相应的子类方法。现在调用您想要在相应的重写方法中调用的任何方法。

某些地方:

class MyClass {
    public void method(StandardClass sc) { }
}

class MySubClass1 extends MyClass {
    public void method(StandardClass sc) {
        sc.method(getA(), getB());
    }
}

class MySubClass2 extends MyClass {
    public void method(StandardClass sc) {
        sc.anotherMethod(getA(), getB());
    }
}

然后你的combinedMethod看起来像:

private void combinedMethod(StandardClass sc, MyClass c) {
    c.method(sc);
}