Non ho capito il problema... così non ti va bene?

codice:
 class Lotto {
 	private String desc; 
	private int codLotto;
 	private List<Prodotto> lista;
  	public Lotto(String desc, int codLotto) { 
		this.desc = desc;
 		this.codLotto = codLotto;
 		this.lista = new ArrayList<Prodotto>();   // Creo una lista vuota
       }
 }
Oppure potresti mantenere la tua soluzione (lista nulla) e posizionare la sua costruzione al primo inserimento:

codice:
public void addProdotto(Prodotto p) {
   if (lista == null) lista = new ArrayList<Prodotto>();
   lista.add( p );
}
Ciao.