gpt4 book ai didi

java 。我如何使用反射向上转换类型?

转载 作者:行者123 更新时间:2023-12-01 05:38:11 24 4
gpt4 key购买 nike

我有两个类 UpObj 和 DownObj

public class UpObj {

public UpObj() {
System.out.println("Load UpObj ");
}

}

public class DownObj extends UpObj {

public DownObj() {
System.out.println("Load DownObj ");
}

}
<小时/>
public class Caller {

UpObj obj;

public Caller(UpObj obj) {
this.obj = obj;
System.out.println("!!!");
}

}
<小时/>
public class GNUMakeFile {

/**
* @param args
*/
public static void main(String[] args) {
DownObj iView = new DownObj();
Class<?> iViewClass = iView.getClass();
Class<?> clazz;
try {
clazz = Class.forName("bla.bla.bla.Caller");
Constructor<?> ctor = clazz.getDeclaredConstructor(iViewClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}

}

}

所以,我想在调用者构造函数中将我的子类型 DownObj 向上转换为父 UpObj。我认为通过帮助泛型这是可能的。像这样的东西。任何人都知道它到底如何使用。

谢谢。

最佳答案

您实际上不应该将 Class.getConstructor() 与您想要传递给它的运行时类型一起使用 - 该方法根据形式参数进行工作。

如果您需要搜索与您拥有的某些对象相匹配的构造函数,则必须循环 getConstructors() ,检查每个构造函数的形式参数,并使用 Class.isAssignableFrom() 检查是否找到合适的签名。我认为没有一种方便的方法可以让反射 API 为您执行重载解析。

(或者,重新考虑你的方法,这样就不再需要搞乱反射了。)

关于 java 。我如何使用反射向上转换类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821098/

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