credo che l'errore sia dovuto dal fatto che quando, in List, dichiari

protected Node head.

A node non passi il tipo, dovresti fare così:

codice:
...
public class List <A>
{
	protected Node<A> head;
	
	public List()
	{
		head = null;
	}
...
e quando allochi con new devi fare la stessa cosa:

codice:
...
public void add(A el)
	{
		head = new Node<A>(el,head);
	}
...
Quindi quando dichiarerai un oggetto list alla classe dovrai passare un tipo, per esempio:

codice:
...
List<String> l = new List<String>();
...
Anch'io non sono pratico delle novità di Java 5, se c'è qualcosa di sbagliato ci sono utenti già disinvolti con queste cose che magari faranno un salto nel thread.