如何通过检查将参数传递给函数

时间:2019-01-06 15:23:34

标签: java android function parameters

我是Android(Java)开发的初学者,遇到了一个不太令人满意的代码。谁能帮助我,告诉我是否有比下面提到的方法更优雅的方法来将所需的参数传递给函数并且对象检查更少

请注意,对于每个参数,有多个检查是否存在给定对象。最糟糕的是重复多次检查。

DAO.inserirEvento(db, uuid_evento.toString(), enco_id,
                evento.getTipo(),
                evento.getStatus(),
                dataCompleta,
                evento.getHora(),
                evento.getCriacao(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getCodigo(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getCep(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getLogradouro(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getNumero(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getLocalidade(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getUf(),
                evento.getDestino() == null ? null : evento.getDestino().get(0) == null ? null : evento.getDestino().get(0).getEndereco() == null ? null : evento.getDestino().get(0).getEndereco().getBairro());

1 个答案:

答案 0 :(得分:2)

您可以使用Optional使其不那么难看。

Optional.ofNullable(evento.getDestino())
        .map(d -> d.get(0))
        .map(d -> d.getEndereco())
        .map(e -> e.getCodigo())
        .orElse(null)

如果任何一个函数返回Optional,则这些null中的每一个将为空。

此外,鉴于getCodgio()是唯一更改的行,因此您可能希望将d.getEndereco()之前的所有内容提取到本地Optional<Endereco>(或任何类型)中,减少重复。

(注意:这假设evento.getDestino()不能为空列表。)