如何指定泛型类?

时间:2014-03-14 08:12:12

标签: java generics

我想在以下代码中生成类实例化:

旧代码:

public abstract class Test{
    public static Test instantiate(Class clazz)throws Exception{ //instance of clazz extends Test
        return (Test)clazz.newInstance();
    }
}

因为参数clazz的任何实例都会扩展类Test,所以我想实现这样的目标:

public static T <T extends Test> instantiate(Class<? extends Test> clazz){
    return clazz.newInstance();
}

它给出了以下编译错误:

Unspecified Bound

如何使用java泛型?

2 个答案:

答案 0 :(得分:6)

你把订单混淆了。这是正确的语法:

public static <T extends Test> T instantiate(Class<T> clazz) {
    return clazz.newInstance();
}

请注意,Class<? extends Test>已更改为Class<T>。当然,您还需要处理任何可能的例外情况。

答案 1 :(得分:1)

试试这段代码:

public static <T extends Test> T instantiate(Class<T> clazz)
throws InstantiationException, IllegalAccessException {
    return clazz.newInstance();
}