类型参数

时间:2015-05-27 18:22:09

标签: java generics

我知道我可以使用给定here的方法创建Type Paramter的实例。但是为什么下面的语句没有编译?

public static <E> void append(List<E> list) {
    E elem = new E();  // compile-time error
    list.add(elem);
}

List<String>list=new ArrayList<String>();
append(list);

1.可以根据我在方法append()中传递的内容来检测E的类型吗?那么Type Inference用于什么?
2.即使未应用类型推断,也不会在运行时将E elem=new E()转换为Object elem=new Object(),这应该没问题?无论如何,它应该工作。但为什么不呢?

编辑:他们给出链接的重复qeustion只回答了我们可以创建Type Parameter实例的方法。它没有回答为什么这种方法不起作用。

1 个答案:

答案 0 :(得分:4)

  1. 没有。类型推断是一种语法特征;这意味着编译器会在调用点处推断,这样您就不需要显式写<String> append(list)

  2. 没有。这会违反编译时类型的安全性。 E可能不是Object,因此Object无法隐式转换为E