実行時に不明な型のオブジェクトを未知のスーパークラスに変換しようとしています。私はこれを行うための最善の方法は、反射を使用することであると考えましたが、それは望みの効果を持つようには見えません。ここではノートPCがデバイスを拡張するコードの例ブロックは次のとおりです。リフレクション - Javaでオブジェクトをスーパークラスに動的に変換する
Laptop obj1 = new Laptop();
System.out.println(obj1.getClass().getName());
String className = obj1.getClass().getSuperclass().getName();
System.out.println(className);
Object newObj;
try {
newObj = Class.forName(className).cast(obj1);
System.out.println(newObj.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
だからここに私は、次のコンソールに出力を期待:
package.Laptop
package.Device
package.Device
しかし、その代わりに、私は取得しています:
package.Laptop
package.Device
package.Laptop
を
obj1が親機タイプに変換されていないことを私に示しています。
私が間違っていることを知っている人、私がやろうとしていることを達成するためのより良い方法があるのか誰にでも教えてもらえますか?
これは仕様です。 – prasanth
オブジェクト*は常にそのサブクラスとそのスーパークラスの両方に同時にあります。オブジェクトをスーパークラスに "変換"することはできません。しかし、 'getClass()'メソッドは常にオブジェクトの最も深いサブクラスを返します。 –
スーパークラスに変換する目的は何ですか?サブクラスのメソッド/フィールドを非表示にするには、デコレータを使用してそれらを非表示にすることができます。 – glee8e