Это поведение для дженериков, написанных без параметра типа.Вы должны, по крайней мере, преобразовать свой старый код в нечто вроде 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]);
}
}