Java--降级到任意类?

Java--降级到任意类?,java,downcast,Java,Downcast,我正在尝试实现以下代码: public void ActionTypeOne { doSomething(ActionType1A action) { ... } doSomething(ActionType1B action) { ... } } 由于ActionTypeOne不实现doSomething(Action),而只实现doSomething(ActionType1A)和doSomething(ActionType1B),因此此代码不会编译 但是,我知道我的

我正在尝试实现以下代码:

 public void ActionTypeOne {

   doSomething(ActionType1A action) { ... }
   doSomething(ActionType1B action) { ... }

  }

由于ActionTypeOne不实现doSomething(Action),而只实现doSomething(ActionType1A)和doSomething(ActionType1B),因此此代码不会编译

但是,我知道我的对象肯定是这些类型中的一种,因为前面有代码。我可以将其拆分并显式地转换为我的两个ActionType之一,但这很混乱

我可以强制排队吗

ActionTypeOne.doSomething(action) 
要根据操作类在ActionTypeOne中调用正确的方法?

您必须根据确定对象实例化的类显式(向下)强制转换:

public void register(Action action) {
    if (action instanceof ActionType1A) {
        ActionTypeOne.doSomething((ActionType1A) action);
    } else if (action instanceof ActionType1B) {
        ActionTypeOne.doSomething((ActionType1B) action);
    }
}

您可以使用反射来获取这些方法,然后调用它们

近似代码:

//in class init or static
Class []params1 = new Class {ActionType1A};
Method doSomethingActionType1A = ActionTypeOne.class.getDeclaredMethod("doSomething", params1);
//…等等 //如果有3个以上,可以将它们添加到哈希映射中,以根据类名获得正确的方法

//当需要调用时-通过if或哈希表获取方法,然后调用它

method1.invoke(Object obj, Object... args);
当实际对象的类型正确时,这将作为运行时的仅调用检查。但是代码会稍微慢一点。除非您关心几个CPU周期或有1000次调用,否则这不是问题

method1.invoke(Object obj, Object... args);