我有两个类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();
}
}
}
所以,我想在调用者构造函数中将我的子类型向下转换为父类型UpObj。我认为这是可能的帮助泛型。就像这样。有人知道这到底是怎么用的吗?
谢谢。
您不应该将Class.getConstructor()
与您想要传递给它的运行时类型一起使用-该方法在形式参数之外工作。
如果你需要搜索一个与你拥有的一些对象匹配的构造函数,你必须遍历getConstructors()
,检查每个构造函数的形式参数,并检查你是否使用Class.isAssignableFrom()
找到了合适的签名。我不认为有一个方便的方法让反射API为你做重载解析。
(或者,重新考虑您的方法,以便不再需要干扰反射。)
没有标准的方法。尝试谷歌的一些解决方案,例如http://www.xinotes.org/notes/note/1329/或如何获得参数类型使用反射?. 我记得Spring和其他一些库也有类似的util函数。你用弹簧吗?
我真的不明白这个问题——通常不需要向上转换。
但问题似乎是要获取对象的上类
如果使用getSuperclass
方法:
Constructor<?> ctor = clazz.getDeclaredConstructor(iViewClass.getSuperclass());
文档:getSuperclass ()