通过Class.forName()动态返回方法调用期间确定的类的类

时间:2013-03-10 20:37:50

标签: java

我知道我可以通过传入一个类然后将该类声明为返回类型来动态确定方法的返回类型,如下例所示:

public static <returnType> returnClass dynamicConstructor (Class<returnType> returnClass){
    //Dynamically construct an object using a zero parameter constructor
    return (returnClass) object;
}

将被调用的代码是:

DynamicConstructor.construct(constructedClass);

这段代码很不错,因为当你在代码中调用方法时,它很简单并且封装了。但是,我想更进一步,使参数成为包含完整类名的字符串,然后让方法通过Class.forName(className)确定对象的类型。这样做的麻烦在于我无法弄清楚如何返回后来确定的类型。使用方法重载,我的代码是:

public static ?????? dynamicConstructor (String className){
    try {
        return dynamicConstructor(Class.forName(className));
    } catch (ClassNotFoundException e) {
        System.out.println("Could not find class at path " + classPath);
        e.printStackTrace();
        return null;
    }
}

问题是我不知道在标有??????的部分放什么。我希望能够以某种方式引用由Class.forName(className)确定的类。这可能吗?

1 个答案:

答案 0 :(得分:0)

当然可以从类名中创建类的实例(只要你有一个零参数构造函数),但是如果存储类名的唯一位置是在字符串,然后无法确定要返回的类型。所以你的方法签名是

public static Object dynamicConstructor(String)

这可能不是很有用或者你想要什么。

所以简短的回答是,不,这是不可能的