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 档案包含 .class 文件,而不是 .java 文件。

因此,如果 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

注意:也没有理由使用反射、withClass.forName(...)等来创建ObjectFoo. 只需使用new运算符即可;那么你也不需要投射。

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