Javaでは、キャスト内でClass.forNameを使用すると、オブジェクトがクラスにキャストされるか、キャストにキャストされます。あなたはこのClass.forNameキャスト
Object a;
String b = "testing";
a = (Class.forName("java.lang.Object")) b;
をした場合の例としては、クラスのインスタンスまたはオブジェクトのインスタンスでしょうか?
Javaでは、キャスト内でClass.forNameを使用すると、オブジェクトがクラスにキャストされるか、キャストにキャストされます。あなたはこのClass.forNameキャスト
Object a;
String b = "testing";
a = (Class.forName("java.lang.Object")) b;
をした場合の例としては、クラスのインスタンスまたはオブジェクトのインスタンスでしょうか?
Class.forName
は、Class
インスタンスを返します。私は、あなたのコードが引用符で囲まれていないとコンパイルできないと確信しています。あなたはキャストとして関数呼び出しを使用しようとしています。
更新:ちょうど考えを持っていた:あなたはキャストに動的にロードされたクラスを使用する方法を求めているならば、あなたは基本的にできません。キャスティングは(ほとんど)コンパイル時のものです。動的にロードされたクラスに、コードにコンパイルしてキャストできるインターフェイスを実装するか、できない場合は、reflectionを使用して、動的にロードされるクラスのメンバーにアクセスします。
ありがとうございます。私はちょうどそれができるかどうかを知りたかった –
Class.forNameは常にクラスを返します。
あなたは、クラスオブジェクトの.cast
メソッドでキャストすることができます:
Object a;
String b = "testing";
a = Class.forName("java.lang.Object").cast(b);
しかし、あなたはキャストについて間違っアイデア持っているようだ - Javaでの、は、任意のオブジェクトを変更しないキャスト、それだけでコンパイラに指示しますオブジェクトは何らかの型であり、実行時には、VMが実際にそうであるかどうかをテストします(コンパイラがまだそれを証明できない場合)。あなたが "騙された"場合、VMはここでClassCastException
を投げます(あなたのオブジェクトは変換されません)。
(プリミティブ型が関与している場合、それは少し異なる動作します。)
Classオブジェクトのcast
方法は、この同じメカニズムの一般的な変形です。戻り値の型はT
(Class<T>
)であるため、汎用コードで未知のオブジェクトをあるクラス型にキャストできます。このクラスオブジェクトは型変数に対応します。 これは役に立ちません。戻り値の型はClass.forName
です。Class<?>
です。つまり、キャストメソッドはObject
しか返せません。
とにかく、java.lang.Objectへのキャストには何の効果もありません(常に成功します)。 (あなたがメソッドをオーバーロードしている場合、これは問題かもしれません。)
を単に
Object a;
String b = "testing";
a = b;
を書くことは、ここで同じ効果があります。
回答ありがとう。 –
それはインスタンスをキャストする必要がある場合、これは私はあなたが実際に尋ねた質問に答えてきましたが、私の疑いはあなたが基礎となる、さまざまな疑問を持っているということですそれを
String className = "YourClass";
Class someClass = Class.forName(className);
Constructor constructor = (Constructor) someClass.getConstructor();
Object someInstance = constructor.newInstance();
// now you can cast as allways.
(YourClass) (someInstance)
を行う方法です。このような質問は、通常、誰かが解決しようとしているが、間違った経路を辿っているという根本的な問題から生じる。根本的な質問をする(別の)質問を掲示することをお勧めします、人々はおそらくあなたがそこに行く方法を示すことができます。 –
どちらも:そのコードはコンパイルされないため、実行できません。 – meriton