从Class返回泛型类型的实例

时间:2014-04-29 11:29:27

标签: java generics types instantiation

我的课程是:

public class Module {}
public class WorkerModule extends Module{}
public class WalkerModule extends Module{}

我有一个带有静态方法的模块工厂来创建模块:

public static Module initializeModule(Class<? extends Module myClass) {
    Module module = null;
    try {
        module = myClass.newInstance();
    } catch (SecurityException e) {
        throw new ModuleException(e);
    } catch (InstantiationException e) {
        throw new ModuleException(e);
    } catch (IllegalAccessException e) {
        throw new ModuleException(e);
    }

    return module;
}

它有效,但我想通过使用泛型类型来改进它。 我仍然需要我的方法来返回我的类参数的实例,我想强制它成为Module类的子类。 我不知道如何改变我方法的声明。 也许是这样的:

public static <T> T initializeModule(Class<T extends Module myClass) {}

但显然,不是那样。

2 个答案:

答案 0 :(得分:3)

public static <T extends Module> T initializeModule(Class<T> myClass) {
    T module = null;
    try {
        module = myClass.newInstance();
    } catch (SecurityException e) {
        throw new ModuleException(e);
    } catch (InstantiationException e) {
        throw new ModuleException(e);
    } catch (IllegalAccessException e) {
        throw new ModuleException(e);
    }
    return module;
}

答案 1 :(得分:1)

会是这样的:

public static <T extends Module> T initializeModule(Class<T> myClass) {
    T module = null;
    try {
        module = myClass.newInstance();
    } catch (SecurityException e) { ...
    } catch (InstantiationException e) { ...
    } catch (IllegalAccessException e) { ...
    }

    return module;
}