我有一个简单的界面/类:
public abstract class Message {}
public class Message1 extends Message {}
public class Message2 extends Message {}
还有一个实用类:
public class Utility {
public void handler(Message m) {
System.out.println("Interface: Message");
}
public void handler(Message1 m) {
System.out.println("Class: Message1");
}
public void handler(Message2 m) {
System.out.println("Class: Message2");
}
}
现在,主要的类:
public static void main(String[] args) {
Utility p = new Utility();
Message1 m1 = new Message1();
p.handler(m1);
Message m = (Message) m1;
p.handler(m);
}
输出结果为:
> Class: Message1
> Interface: Message
我希望p.handler(m)
调用方法p.handler(m:Message1)
我不想使用“手动”的命令instanceof
,因为我有很多情况:
if(m instance of Message1)
p.handler((Message1)m)
else if (m instanceof Message2)
p.handler((Message2)m)
...
如果我调用
m.getClass()
,我会得到 "mypackage.Message1",这是子类而不是超类。我尝试使用以下代码(使用反射):
p.handler(m.getClass().cast(m));
但输出结果是:
> Interface: Message
所以,我的问题是,我想将超类对象强制转换为子类对象,而不使用“代码命令”instanceof。
我需要一个正确的命令,就像这样:
p.handler((m.getclass)m);
我该如何获取它?这是可能的吗?