有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

运行时子类的java超类方法和子类方法

我在主类中使用了超类作为参数的方法

public class MainClass() {
...
    public void myMethod(MyClass class)
...

在运行时,这个对象可以是它的任何子类,它应该根据同一个主类中的子类调用不同的方法

public class MainClass() {
...
    public void mySubMethod(MySubClass1 class)

    public void mySubMethod(MuySubClass2 class)
...

当然,我可以将instanceOf或静态工厂模式与Enum一起使用,但仍然是(伪代码)

public void myMethod(MyClass class) {
if (instanceOf == MySubclass1) mySubMethod((MySubClass1)subClass1Object)
if (instanceOf == MySubclass2) mySubMethod((MySubClass2)subClass2Object)
}

在运行时,jvm知道对象到底是哪个子类,并且知道每个子方法参数应该是哪个子类。我无法控制MyClass、MySubclass1和MySubclass2

但有什么优雅的方法可以做到这一点吗


共 (2) 个答案

  1. # 1 楼答案

    解决这个问题的一个办法是在工厂里使用手持设备

    public class HandlerRegistry {
      public void registerHandler(Class classToHandle, HandlerFactory handler)
      // returns the proper handler (via the HandlerFactory) for the registered class
      public Handler getHandlerFor(Class classToHandle)
    }
    

    您可以使这个类中的方法成为静态的,或者使用Singleton模式使HandlerArgistry在任何地方都可以访问 }

  2. # 2 楼答案

    通过将这些方法移动到不同的目标子类本身,可以使用“双重分派”

    interface MyClass {
       void mySubMethod(Something context);
    }
    
    public void myMethod(MyClass target){
       target.mySubMethod(this);
    }