首页 > 解决方案 > 纯java方法应该是静态的吗?

问题描述

假设我们有一个纯 java 方法。它是一种简单的验证方法。它验证输入是否正确,如果不正确则抛出异常。

    static void validateInputIsOk(String input) throws InvalidArgumentException {
        if (input == null || !input.equals("Valid input")) {
            throw new InvalidArgumentException(new String[]{"Bad input"});
        }
    }

它是纯粹的,它是静态的,它很小,而且很容易推理。

所以我一直在阅读很多关于 java 静态方法的内容,很多人反对这一点。主要是因为可测试性。现在我完全明白了。模拟静态方法并不容易。如果我在其他单元中使用这个验证器,那么我必须要么接受它将成为测试的一部分(因为它是纯粹的,所以它可能没问题),或者使用某种静态模拟框架。

但为了使它可模拟和非静态,我必须牺牲代码的简单性和可读性。我将不得不处理创建对象,并可能将其作为参数传递给使用它的单元。

因此,从这个角度来看,我倾向于将我的纯方法设为静态,而不是去嘲笑它们。似乎让我的代码保持最简单和干净。

你觉得我对吗?我在这里缺少什么吗?

标签: java

解决方案


没有副作用的方法,术语是函数,应该是静态的。而且风格很好。Math提供了许多这样的功能。

对于测试,我们不会模拟这些功能,而是单独测试它们。


推荐阅读