我知道我可以使用给定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实例的方法。它没有回答为什么这种方法不起作用。
答案 0 :(得分:4)
没有。类型推断是一种语法特征;这意味着编译器会在调用点处推断,这样您就不需要显式写<String> append(list)
。
没有。这会违反编译时类型的安全性。 E
可能不是Object
,因此Object
无法隐式转换为E
。