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?

questionAnswers(2)

yourAnswerToTheQuestion