Reflexão: projete um objeto para subclasse sem usar instanceof
Eu tenho essa interface / classe simples:
public abstract class Message {}
public class Message1 extends Message {}
public class Message2 extends Message {}
E uma classe de utilidade:
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");
}
}
Agora, a classe principal:
public static void main(String[] args) {
Utility p = new Utility();
Message1 m1 = new Message1();
p.handler(m1);
Message m = (Message) m1;
p.handler(m);
}
A saída é
> Class: Message1
> Interface: Message
Eu faria issop.handler(m)
chame o métodop.handler(m:Message1)
Eu não quero usar o comando "manual"instanceof
porque eu tenho muitos casos:
if(m instance of Message1)
p.handler((Message1)m)
else if (m instanceof Message2)
p.handler((Message2)m)
...
Se eu ligarm.getClass()
Eu obtenho "mypackage.Message1", então a subclasse e não a superclasse.
Eu tento com este código (use reflexão):
p.handler(m.getClass().cast(m));
Mas a saída é
> Interface: Message
Então, este é o meu problema. Eu faria uma conversão em tempo de execução do objeto da superclasse para subclassificar o objeto sem usar o "comando de código" istanceof.
Eu teria um comando certo como este:
p.handler((m.getclass)m);
Como posso obtê-lo? É possível?