[英]Get class properties from class absolute path using reflection in java
我使用文件 package 生成新类,但是当我想使用反射获取 class 属性时,它不起作用,它给了我下面的错误但是当我刷新我的 ZEFE90A8E604A7C840E88D03A67F6B7我重新运行我的 function 它可以工作。 所以现在我认为我需要通过使用绝对路径而不是 package 的名称来更改我的方法来获取这些属性。
我的代码
import java.lang.reflect.Field;
public class Main7{
public static void main(String[] args) throws Exception {
Class classe = Class.forName("com.test.model.Client");
// affiche tous les attributs
System.out.println("Attributs -------------------------------------");
for (Field attribut : classe.getDeclaredFields()) {
// System.out.print(" "+Modifier.toString(attribut.getModifiers()));
String type = attribut.getType().getName();
if(type.contains(".")) {
String[] tab = type.split("\\.");
type=tab[2];
}
System.out.println(type+" "+attribut.getName());
}
}
}
错误
Exception in thread "main" java.lang.ClassNotFoundException: ma.dxc.generator.model.Client
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at generatortest.Main7.main(Main7.java:16)
好结果
Attributs -------------------------------------
long id
String name
String city
获取 class 属性的最简单方法是这样的:
Class klass = com.test.model.Client.class;
或者简单地说:
Class klass = Client.class;
如果您已经导入了上面的 class。
或者,如果您有 object 的实例:
Class klass = obj.getClass();
Class.forName()用于将新类动态加载到系统中。 并且没有必要通过反射获得 class 属性。
拥有Class object 后,您可以获得更多信息,例如getDeclaredFields()等。
如果你想在当前类路径之外加载一些东西,你可以像这样使用URLClassLoader :
URLClassLoader loader = new URLClassLoader(new URL[] { "file://path/to/jar/or/directory"});
Class klass = loader.loadClass("com.test.model.Client");
这篇文章也可能是相关的: 如何使用 URLClassLoader 加载 *.class 文件?
Class.forName()不会超出您的类路径。 它旨在动态加载已添加到类路径中的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.