gpt4 book ai didi

java类创建自己的实例

转载 作者:行者123 更新时间:2023-11-29 07:55:51 24 4
gpt4 key购买 nike

我正在尝试使用反射创建持有类的实例,但我不断收到以下异常

java.lang.ClassNotFoundException: class com.myproject.fresh.stubClasses.TestModel at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:171)

public class TestModel extends Model {

@Override
public Schema getSchema() {
return schema;
}

public TestModel newModel(){

TestModel model = null;

try{

Class<?> clazz = Class.forName(getClass().toString());
Constructor<?> ctor = clazz.getConstructor();
model = (TestModel) ctor.newInstance();

} catch (Exception e){
e.printStackTrace();
}

return model;
}
}

我做错了什么?

最佳答案

问题是 getClass().toString() 返回(例如)class com.myproject.fresh.stubClasses.TestModel,带有一个杂散的 class 开头。如果您改用 getName(),它应该可以工作:

Class<?> clazz = Class.forName(getClass().getName());

虽然如果这是“真实的”代码(而不只是计算填充代码),那么写这样会更容易:

Class<?> clazz = getClass();

这还可以让您更好地使用泛型:

Class<? extends TestModel> clazz = getClass();
Constructor<? extends TestModel> ctor = clazz.getConstructor();
model = ctor.newInstance();

或:

return getClass().getConstructor().newInstance();

关于java类创建自己的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com