假设我有一个名为 ObjectFoo.class 的类文件,但我无法访问 ObjectFoo.java 源文件,因为类文件是在运行时创建。在这种情况下有没有办法转换对象?
目前,我正在使用此代码来转换对象,但在此示例中,我需要在类路径中包含 ObjectFoo.java :
Class c = Class.forName("ObjectFoo");
ObjectFoo object = (ObjectFoo) c.newInstance();
目标是使用Java反射从其类文件中实例化对象。 我正在寻找仅使用Java API而不使用其他第三方库的解决方案。
提前感谢您的回答!
乔纳森。
答案 0 :(得分:6)
当您使用第三方库,包作为.jar文件时,您将始终编译并运行.class文件。 .jar存档包含.class文件,而不是.java文件。
因此,如果ObjectFoo类不属于包,则上面的代码是正确的。否则,你必须把完整的包像路径一样放到类中。
答案 1 :(得分:2)
要使用Java类,您不需要源文件。您只需要编译的类文件,并且需要确保Java编译器可以在正确的位置找到类文件。
在编译和运行自己的代码时,确保包含文件ObjectFoo.class
的目录位于类路径中。您可以使用-cp
和javac
命令的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();