类型参数数组

时间:2018-08-30 20:04:33

标签: java type-erasure

我正在阅读甲骨文的https://docs.oracle.com/javase/tutorial/java/generics/nonReifiableVarargsType.html#vulnerabilities

其中提到

  

在方法ArrayBuilder.addToList中,编译器翻译   varargs形式参数T ...形式参数T []的元素   元素,一个数组。但是,由于类型擦除,编译器   将varargs形式参数转换为Object []元素。   因此,有堆污染的可能性。

我尝试了以下方法签名;

static <T> void varargsOfTypeParameter(T... varargs) {  // compile warning as expected

}

static <T> void arrayOfTypeParameter(T[] array) {  // no compile warning

}

在两种情况下,类型擦除后,T...T[]都变为Object[],因此在两种情况下都存在潜在的堆污染。但是,只有在第一种情况下才会出现编译器警告,而在后一种情况下则没有警告。

为什么会这样?我想念什么吗?

0 个答案:

没有答案