私はこの単純なインターフェース/クラスを持っています:
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
だから、これは私の問題です。「コードコマンド」istanceofを使用せずに、スーパークラスオブジェクトからサブクラスオブジェクトへのランタイムキャストを実行します。
私はこのような正しいコマンドをします:
p.handler((m.getclass)m);
どうすれば入手できますか?それが可能だ?