当我们只有.class文件时如何转换对象?

时间:2012-11-26 08:32:46

标签: java reflection casting

假设我有一个名为 ObjectFoo.class 的类文件,但我无法访问 ObjectFoo.java 源文件,因为类文件是在运行时创建。在这种情况下有没有办法转换对象?

目前,我正在使用此代码来转换对象,但在此示例中,我需要在类路径中包含 ObjectFoo.java

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

目标是使用Java反射从其类文件中实例化对象。 我正在寻找仅使用Java API而不使用其他第三方库的解决方案。

提前感谢您的回答!

乔纳森。

2 个答案:

答案 0 :(得分:6)

当您使用第三方库,包作为.jar文件时,您将始终编译并运行.class文件。 .jar存档包含.class文件,而不是.java文件。

因此,如果ObjectFoo类不属于包,则上面的代码是正确的。否则,你必须把完整的包像路径一样放到类中。

答案 1 :(得分:2)

要使用Java类,您不需要源文件。您只需要编译的类文件,并且需要确保Java编译器可以在正确的位置找到类文件。

在编译和运行自己的代码时,确保包含文件ObjectFoo.class的目录位于类路径中。您可以使用-cpjavac命令的java选项来执行此操作:

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

其中C:\SomeDirectory是包含ObjectFoo.class的目录。

注意:也没有理由使用Class.forName(...)等反射来创建ObjectFoo的新实例。只需使用new运算符;那么你也不需要施放。

ObjectFoo object = new ObjectFoo();