É 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;
    }