0

私は動的クラスのロードをテストしているだけで、これを行っています:

package P1;
public class Class1
{
    public static void main(String[] args)
    {
         Bird myBird = null;
         String myClassName = "P2.Bird";
         Class x = Class.forName(myClassName);
         myBird = (Bird)x.newInstance();
    }
}

Birdは からのクラスでpackage P2あり、Class1からP1です。String myClassName...行にエラー (クラスが見つかりません) が表示されるため、これを機能させるにはコードに何を追加する必要がありますか。Birdに引っ越した後、同じコードを試しましたがpackage P1、それでも機能しません。

関連する質問: 動的クラス ロードを使用する理由は何ですか?それには利点がありますか? 静的クラスのロードに「new」演算子を使用する方がはるかに簡単です(少なくとも一見したところ)。その場合、別のパッケージからクラスを参照する方法を知っています。どうもありがとう!

4

2 に答える 2

1

最初の質問に対する答えとして、完全なパッケージ名を挙げてみてください。私はそれを試してみましたが、うまくいきます

于 2013-01-30T15:01:33.957 に答える
1

あなたの Bird クラスは、引数のないデフォルトの public コンストラクターを提供しますか?

動的なクラスの読み込みは、たとえば、構成ファイルで使用するクラスを指定するのに役立ちます (log4j や、独自の実装をインターフェイスの 1 つに使用できる他のライブラリを使用する場合に、これに遭遇するでしょう)。その場合、ライブラリは使用するクラスを認識せず、ライブラリを初期化するためのコードを記述する必要はありません (これは動的クラス ローディングの代わりになりますが、あまり便利ではありません)。

于 2013-01-30T14:58:28.080 に答える