3

大丈夫。私は Java プログラムのいくつかのリフレクションに取り組んでいますが、単純に見えるがうまくいかない部分に行き詰まっています。

これが私がやろうとしていることです:

Thread t = new Thread();
System.out.println("Casting "+Thread.class.getName()+" to "+Runnable.class.getName());
Object newThread = Runnable.class.cast(t);
System.out.println("New class: "+newThread.getClass().getName());

期待される出力は になりますが New class: java.lang.Runnable、 が返されますNew class: java.lang.Thread

私は何を間違っていますか?(この場合、ブラケットを介した通常のキャストは使用できないことに注意してください)

4

2 に答える 2

4

オブジェクト参照型でのキャストとは何かを理解する必要があります。通常のキャストと同様に、Classcastメソッドはオブジェクトの実際の型を変更しません。オブジェクトを参照する適切な型の参照変数を生成しますが、これは変更されません。

Thread tまだThreadです。キャストは実際には機能しThreadますRunnableClassCastException。しかし、それはまだThreadです。

于 2013-10-25T21:58:54.230 に答える
1

Thread クラスの定義方法は次のとおりです。

public class Thread
extends Object
implements Runnable

そのため、Thread クラスのインスタンスであるオブジェクトは、Runnable としてキャストしても、そのクラス名を Thread として返します。

于 2013-10-25T21:58:35.207 に答える