I have this simple interface/class:
public abstract class Message {}
public class Message1 extends Message {}
public class Message2 extends Message {}
And an utility class:
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");
}
}
Now, the main class:
public static void main(String[] args) {
Utility p = new Utility();
Message1 m1 = new Message1();
p.handler(m1);
Message m = (Message) m1;
p.handler(m);
}
The output is
> Class: Message1
> Interface: Message
I would that p.handler(m)
call the method p.handler(m:Message1)
I don't want use the "manual" command instanceof
because I have many cases:
if(m instance of Message1)
p.handler((Message1)m)
else if (m instanceof Message2)
p.handler((Message2)m)
...
If I call m.getClass()
I obtain "mypackage.Message1", so the subclass and not the superclass.
I try with this code (use reflection):
p.handler(m.getClass().cast(m));
But the output is
> Interface: Message
So, this is my problem. I would do a runtime cast of superclass object to subclassobject without use the "code command" istanceof.
I would a right command like this:
p.handler((m.getclass)m);
How can I obtain it? It's possible?