É realmente uma boa prática colocar a validação do endereço assim, direto no construtor? Não seria melhor criar um setEndereco que faz essa validação, e chamá-lo no construtor?
public Email(String endereco) {//expressao regular pra fazer validacao:
if(endereco == null || !endereco.matches("")) {
throw new IllegalArgumentException("Email inválido.");
}
this.endereco = endereco;
}