方法重构以避免许多 npe 检查

发布于 2025-01-12 01:19:28 字数 1185 浏览 3 评论 0原文

我创建了以下方法,它返回一个三重字符串。然而,我不喜欢我编写它的方式,因为我认为我放入了太多的 Npe 检查,使其不可读。

private Triplet<String, String, String> getInfoFromTable(Person person) {
    StringBuilder idWithText = new StringBuilder();
    String idText;
    Date time = null;
    Level level;

    Exercise exerciseRecord = getExercise(person);
    if (exerciseRecord != null && exerciseRecord.getId() != null) {

        if(exerciseRecord.getLevel1() != null &&  exerciseRecord.getLevel2() != null){
            level = new Level(exerciseRecord.getLevel1(), exerciseRecord.getLevel2());
        } else {
            level = new Level("1", "1");
        }
        idText = getIdText(level, exerciseRecord.getId());

        if(!Strings.isNullOrEmpty(idText)) {
            idWithText = idWithText.append(exerciseRecord.getId()).append(" " + idText);
        }

        if (exerciseRecord.getTime() != null) {
            time = exerciseRecord.getTime().toDate();
        }

        return new Triplet<>(idWithText.toString(), "1", formatTime(time));
    }


    return new Triplet<>("", "", "");
}

如何让上面的代码看起来更简单?我已经看到了一些可选的用法,但我不知道在我的情况下使用它们是否很好。有人可以帮助重构方法吗?

I have created the following method which returns a Triple of strings. However, I don't like the way I've written it because I think I've put in too many Npe checks making it unreadable.

private Triplet<String, String, String> getInfoFromTable(Person person) {
    StringBuilder idWithText = new StringBuilder();
    String idText;
    Date time = null;
    Level level;

    Exercise exerciseRecord = getExercise(person);
    if (exerciseRecord != null && exerciseRecord.getId() != null) {

        if(exerciseRecord.getLevel1() != null &&  exerciseRecord.getLevel2() != null){
            level = new Level(exerciseRecord.getLevel1(), exerciseRecord.getLevel2());
        } else {
            level = new Level("1", "1");
        }
        idText = getIdText(level, exerciseRecord.getId());

        if(!Strings.isNullOrEmpty(idText)) {
            idWithText = idWithText.append(exerciseRecord.getId()).append(" " + idText);
        }

        if (exerciseRecord.getTime() != null) {
            time = exerciseRecord.getTime().toDate();
        }

        return new Triplet<>(idWithText.toString(), "1", formatTime(time));
    }


    return new Triplet<>("", "", "");
}

Ηow can I make the above code look simpler? I've seen a little use of Optional but I don't know if it's good to use them in my case. Could someone help with the method refactor?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸠魁 2025-01-19 01:19:28

您需要将庞大的方法拆分为几个简单的方法,这会降低复杂性。

    private Triplet<String, String, String> getInfoFromTable(Person person) {
        Exercise exerciseRecord = getExercise(person);
        if (exerciseRecord != null && exerciseRecord.getId() != null) {
             return new Triplet<>(getIdWithText(exerciseRecord, getLevel(exerciseRecord)), "1", formatTime(exerciseRecord.getTime()));
        }
        return new Triplet<>("", "", "");
    }

    private String formatTime(LocalTime time) {
        if (time == null) {
            return "";
        }
        return formatTime(time.toDate());
    }

    private Level getLevel(Exercise exerciseRecord) {
        Level level;
        if(exerciseRecord.getLevel1() != null &&  exerciseRecord.getLevel2() != null){
            level = new Level(exerciseRecord.getLevel1(), exerciseRecord.getLevel2());
        } else {
            level = new Level("1", "1");
        }
        return level;
    }

    private String getIdWithText(Exercise exerciseRecord, Level level) {
        String idWithText = "";
        String idText = getIdText(level, exerciseRecord.getId());
        if(!Strings.isNullOrEmpty(idText)) {
            idWithText = String.format("%s %s", exerciseRecord.getId(), idText);
        }
        return idWithText;
    }

You need to split the huge method into several simple, it will decrease complexity.

    private Triplet<String, String, String> getInfoFromTable(Person person) {
        Exercise exerciseRecord = getExercise(person);
        if (exerciseRecord != null && exerciseRecord.getId() != null) {
             return new Triplet<>(getIdWithText(exerciseRecord, getLevel(exerciseRecord)), "1", formatTime(exerciseRecord.getTime()));
        }
        return new Triplet<>("", "", "");
    }

    private String formatTime(LocalTime time) {
        if (time == null) {
            return "";
        }
        return formatTime(time.toDate());
    }

    private Level getLevel(Exercise exerciseRecord) {
        Level level;
        if(exerciseRecord.getLevel1() != null &&  exerciseRecord.getLevel2() != null){
            level = new Level(exerciseRecord.getLevel1(), exerciseRecord.getLevel2());
        } else {
            level = new Level("1", "1");
        }
        return level;
    }

    private String getIdWithText(Exercise exerciseRecord, Level level) {
        String idWithText = "";
        String idText = getIdText(level, exerciseRecord.getId());
        if(!Strings.isNullOrEmpty(idText)) {
            idWithText = String.format("%s %s", exerciseRecord.getId(), idText);
        }
        return idWithText;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文