Oggi ho parlato con il professore. E' logicamente scorretto il programma, ma non è mio l'errore. E' del libro di testa (e stiamo parlando di Dati e Algoritmi di Goodrich Tamassia - una bibbia)

public class GenClass<K> implements Comparator<K> { .... }

allora K è una type variable e sarebbe tecnicamente corretto. Cosa te ne faresti di una classe del genere .... non lo so. E non so dove/come intendi usare K all'interno di GenClass.
Posto il codice per curiosità, così capisci a cosa mi serve:

codice:
	protected static class NaturalComparator<K> implements Comparator<K>
	{	
		public int compare(K key1, K key2)
		{
			return ( (Comparable<K>) key1).compareTo(key2);	
		}
	}
Ovviamente perché questo codice sia corretto il tipo generico K deve implementare comparable. Io ci impongo un cast ma il compilatore (giustamente) mi dà un warning.

La creazione di un comparatore generico di default (che funziona quindi come un adattatore, facendo fare il lavoro a compareTo) non è una soluzione elegante se non si conosce la natura degli elementi (in questo caso chiavi) da comparare.