Java.我如何使用反射来向上转换类型?



我有两个类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 ()

相关内容

  • 没有找到相关文章

最新更新