4

クラスの1つをロードするには、JavaのClass.forName( "")を使用する必要があります。問題は、完全修飾クラス名ではなく、クラス名のみを指定してクラスをロードする必要があることです。

  1. たとえば、これは機能しますが、私の要件に適合しません。

    Class.forName( "reflection.Person");

  2. そして、これは私が必要としているものですが、機能していません:

    Class.forName( "Person");

誰もが#2を機能させる方法を知っていますか?単純なクラス名を使用する必要があります。クラスが存在するかどうかを確認するためにフォルダ構造をウォークスルーするサードパーティツールはありますか?これは実行可能なJARとしてデプロイされます。

前もって感謝します。

4

2 に答える 2

4

クラスパス上のすべてのクラスを取得し、それらを繰り返して、目的のクラスと同じ単純な名前を持つクラスを確認する必要があります。次にClass.forName(..)、完全修飾名を使用します。同じ名前を複数のパッケージで使用できることに注意してください。

インターフェイスを実装するクラス、または特定のアノテーションが付けられたクラスを探す方がよいでしょう。単純な名前に依存することは、特にクラスパスが大きくなる場合は、非常に難しい場合があります。

于 2012-04-26T22:08:48.253 に答える
1

「Person」のようなクラス名の意味は、ソースコードのどこにあるかによって異なることを理解する必要があります。どこでも完全修飾クラス名を必要としないのはJavaコンパイラの便利さです。ただし、実行時に、バイトコードでは、すべてのクラス名が完全に修飾されます。

于 2012-04-26T22:16:19.103 に答える