gpt4 book ai didi

java - 没有泛型的动态实例创建

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:42 24 4
gpt4 key购买 nike

我想了解为什么以下内容不起作用:

public class HelloClass {

private class MyClass
{
public MyClass()
{
System.out.println ("Oh heck this is me!");
}
}

public Object newInstance (Object o)
{
try {
// java.lang.InstantiationException here
return o.getClass().newInstance();
} catch (Exception e) {
e.printStackTrace(System.out);
return null;
}
}

public void run()
{
MyClass m = new MyClass();
Object o = newInstance(m);
}

public static void main(String[] args)
{
HelloClass hd = new HelloClass();
hd.run();
}
}

我知道通过将 newInstance 参数声明为 Class 来实现此目的的正确方法,但我想了解为什么不能像上面那样完成。

UPD:这是我遇到的异常:

java.lang.InstantiationException: HelloClass$MyClass
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at HelloClass.newInstance(HelloClass.java:14)
at HelloClass.run(HelloClass.java:24)
at HelloClass.main(HelloClass.java:30)

最佳答案

内部类的构造函数有一个隐藏的第一个参数,您需要在使用反射时提供该参数。传递外部类的实例。

代替

return o.getClass().newInstance();

使用:

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

关于java - 没有泛型的动态实例创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214124/

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