类和新实例的Java泛型

时间:2015-07-08 08:49:01

标签: java generics

在Java中,如果我有:

$("#table_head tr").click(function (e) {
    e.preventDefault();

    /* My Function */

    if (e.target.tagName == 'A') 
        window.location.assign(e.target.href);
});

我可以public class Foo<T> { public Foo() { } } 但我找不到使用Foo<Integer> foo = new Foo<Integer>();字段的等效语法,这意味着像class这样的东西不起作用。有没有办法通过newInstance方法使用泛型?

3 个答案:

答案 0 :(得分:1)

您只能在没有参数化类型的情况下执行此操作。 Class.newInstance()不太值得推荐。你可以这样做:

//Class<Foo<Integer>> clazz = Foo<Integer>.class; <-- Error
Class<Foo> clazz = Foo.class; // <-- Ok
Foo instance = clazz.getConstructor().newInstance();

Why is Class.newInstance() evil?

希望它有所帮助。

答案 1 :(得分:1)

.newInstance()(以及使用Class的任何内容)是一个反射API,它在运行时基本上可以运行。因此,它与在编译时运行的泛型无关。

答案 2 :(得分:0)

newInstance()是Java早期的API - 当时没有泛型。您必须转换返回值。

另外:将来没有方法可以做到这一点,newInstance()用于在运行时动态创建对象。由于Java中的类型擦除,运行时不再存在通用信息。