データ型 Y と Z に変換したいのですが、単純な括弧付きの型変換ではうまくいきません。
おそらく「単純な括弧付き型変換」とは、次のようなことを意味します。
X myX = ...
Y myY = (Y) myX;
それは「タイプキャスト」と呼ばれます。
「myX
が本当に のインスタンスである場合はY
、それを に割り当てますmyY
」と表示されます。を参照するオブジェクトがのインスタンスでない場合、型キャストは (実行時例外1で) 失敗します。myX
Y
スーパークラス オブジェクトからサブクラス オブジェクトにそのように変換できないことは理解しています。
「変換」が上記のタイプキャストとは異なることを意味している場合、それは正しいです。
しかし、これを達成する方法はありますか?
オブジェクトを実際の型または実際の型のスーパータイプとは異なる型に「変換」する一般的な方法はありません。このような「変換」は、タスクを実行するための何らかのメソッドを記述することによってのみ行うことができ、必然的に別個の新しいオブジェクトを作成する必要があります。これが賢明かどうか (または可能かどうか) は、アプリケーションによって異なります。
(たとえば、インスタンスがグラフ内のノードを表す場合、新しいオブジェクトを作成する「変換」により、グラフの他のノードが参照していないものが得られます。これは、何かを壊す可能性があります。)
1 -instanceof
テストを使用して例外を防ぐことができますが、オブジェクトをメンバーではない型に型キャストすることはできません。