在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方法使用泛型?
答案 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中的类型擦除,运行时不再存在通用信息。