java generics arraylist comparable min-heap

java - ¿Cómo puedo subclasificar ArrayList y exigir que<E> se extienda? Comparable



generics min-heap (1)

Creo que lo que trato de hacer es claro, pero no soy un experto en genéricos.

import java.util.ArrayList; public class MinHeap<E extends Comparable> extends ArrayList<E> { /* A simple wrapper around a List to make it a binary min-heap. */ public MinHeap() { super(); } @Override public boolean add(E e) { super.add(e); int i = this.size() - 1; int parent; while (i > 0) { parent = this.getParentIndex(i); if (this.get(i).compareTo(this.get(parent)) < 0) { this.swap(i, parent); } else { break; } } return true; } public int getParentIndex(int i) { if (i % 2 == 1) { return (i - 1) / 2; } else { return (i - 2) / 2; } } private void swap(int i, int j) { E temp = this.get(i); this.set(i, this.get(j)); this.set(j, temp); } }

Recibo una advertencia en tiempo de compilación:

MinHeap.java:21: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type Comparable if (this.get(i).compareTo(this.get(parent)) < 0) { ^ where T is a type-variable: T extends Object declared in interface Comparable 1 warning

que no entiendo ¿Qué me estoy perdiendo?

Inicialmente pensé que tenía que ver con la necesidad de verificar que this.get (i) y this.get (parent) fueran instancias de Comparable ... así que agregué un cheque:

if (!(this.get(i) instanceof Comparable) || !(this.get(parent) instanceof Comparable)) { return false; }

Pero eso da la misma advertencia.


public class MinHeap<E extends Comparable> extends ArrayList<E>

debiera ser

public class MinHeap<E extends Comparable<E>> extends ArrayList<E>

ya que Comparable es una interfaz genérica en sí misma.