3

ObjectFoo.classという名前のクラスファイルがありますが、クラスファイルは実行時に作成されるため、 ObjectFoo.javaソースファイルにアクセスできないとします。この場合、オブジェクトをキャストする方法はありますか?

現在、このコードを使用してオブジェクトをキャストしていますが、この例では、クラスパスにObjectFoo.javaを含める必要があります。

Class c = Class.forName("ObjectFoo");
ObjectFoo object = (ObjectFoo) c.newInstance();

目標は、Javaリフレクションを使用してクラスファイルからオブジェクトをインスタンス化することです。 Java APIのみを使用し、他のサードパーティライブラリを使用しないソリューションを探しています。

よろしくお願いします!

ジョナサン。

4

2 に答える 2

6

サードパーティのライブラリ、パッケージを.jarファイルとして使用する場合、常にコンパイルして.classファイルに対して実行します。.jarアーカイブには、.javaファイルではなく.classファイルが含まれています。

したがって、ObjectFooクラスがパッケージに属していない場合、上記のコードは正しいです。それ以外の場合は、クラスへのパスのような完全なパッケージを配置する必要があります。

于 2012-11-26T08:37:14.743 に答える
2

Javaクラスを使用するために、ソースファイルは必要ありません。必要なのはコンパイルされたクラスファイルだけであり、Javaコンパイラが適切な場所でクラスファイルを見つけられることを確認する必要があります。

ObjectFoo.class独自のコードをコンパイルして実行するときは、ファイルを含むディレクトリがクラスパスにあることを確認してください。andコマンドの-cpオプションを使用してこれを行うことができます。javacjava

javac -cp C:\SomeDirectory;. MyProgram.java
java -cp C:\SomeDirectory;. MyProgram.java

ここC:\SomeDirectoryで、はを含むディレクトリですObjectFoo.class

Class.forName(...)注:の新しいインスタンスを作成するためにリフレクションなどを使用する理由もありませんObjectFoonew代わりに演算子を使用してください。その後、キャストする必要もありません。

ObjectFoo object = new ObjectFoo();
于 2012-11-26T08:56:27.877 に答える