我有一个声明为
的类class Heap extends ArrayList<Element>
出于某种原因,我需要将其通用化为
class Heap<HeapImpl extends Heap> extends ArrayList<Element>
但是,我仍然有遗留代码,其中变量简单地声明为
Heap heap;
对于这些变量,将删除父级的泛型类型,并将其简单地指定为ArrayList<Object>
。为什么会发生?
答案 0 :(得分:0)
这是不带类型参数编写的泛型的行为。您至少应该将旧代码转换为类似Heap的东西。
有关更多详细信息,请参见语言规范
更新:
这是一个测试,我似乎没有得到你所描述的
package generics;
import static org.junit.Assert.*;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import org.junit.Test;
public class HeapTest {
public static class Heap<T> extends ArrayList<String> {}
@Test
public void test() {
Heap h = new Heap<>();
Type sc = h.getClass().getGenericSuperclass();
assertTrue(sc instanceof ParameterizedType);
ParameterizedType pt = (ParameterizedType) sc;
assertEquals(1, pt.getActualTypeArguments().length);
assertSame(String.class, pt.getActualTypeArguments()[0]);
}
}