2010-11-24 13 views
0

これは明らかです。オブジェクトmyObjetをmyObjet.getClassの型にキャストするにはどうすればよいですか? 私はforName()、キャストなどの組み合わせを試しました...どれもうまくいきません:sダイナミックキャスティング:

問題は私がオブジェクトのリストを持っていて、元のタイプに戻したいのです。 myObjet.getClass.getName()によって与えられます)。

よろしく、 ティム


はい、これはJavaのであり、それは確かに間違っていないです。問題を説明しましょう。メインクラスのFormから派生したSquaresやCirclesのような単純なフォームを扱うプログラムを描きましょう。

だからフォームを返す検索機能がありますが、あなたは(たとえば、数)タイプと、フォームの参照を提供する必要があります。

Form myForm= searchForm(String formType, String formRef) 

私はそれを返すどのような形を知っています私はこれらの引数を検索関数に与えました:例えば、正方形です。返されるオブジェクトはまだフォームになりますが、Squareクラスにしたいので、キャストする必要があります。 SquareはFormから継承しているので互換性があります。

唯一の問題は「formType」が可変であることです。確かにSquareですが、「Circle」でもかまいません。そのため、私はリターンオブジェクトのジェネリックキャストが必要です。

myForm.getClass()。getName()を実行すると、「Square」が取得されます。だからmyFormをmyForm.getClass()にキャストする必要があります。

問題が表示されますか?

+2

これはどの言語ですか? –

+0

これは何らかの(間違った)Javaのようです。また、私は方法を理解していません。説明していただけますか? – dmeister

答えて

0

キャストはオブジェクト自体を変更しません。キャストは、コンパイラがオブジェクトで行うことができるものだけを変更します。

Javaには、オブジェクトでできることを記述する2つの方法(クラスとインタフェース)があります。あなたがキャストするものは、コンパイル時にコンパイラが知っているものでなければなりません。さもなければ、コンパイラは、あなたが何かばかげたことをしないようにすることはできません。例えば、myCircle.bark()を書くことです。

2つの選択肢があります:クラスに共通するもの(実装されたインターフェイスまたはそれらが派生したクラス)があれば、その共通の記述にキャストしようとすることができます。しかし、これはあなたが望むものではないように思えます。代わりに、あなたが行うにはJavaの力がなど、Squareのように、あなたが何かをしたい場合があり、それぞれ具体的なクラスにあなたのオブジェクトをキャストしようとif/else文、Circleのチェーンを持つことである

しかし、オブジェクトをキャストそれ自身のクラスには意味がありません。なぜなら、コンパイル時にオブジェクトが持つメソッドや持っていないメソッドに関する情報をコンパイラーに与えないからです。

+0

よろしくお願い致します! – Tim