java - 纯java方法应该是静态的吗?
问题描述
假设我们有一个纯 java 方法。它是一种简单的验证方法。它验证输入是否正确,如果不正确则抛出异常。
static void validateInputIsOk(String input) throws InvalidArgumentException {
if (input == null || !input.equals("Valid input")) {
throw new InvalidArgumentException(new String[]{"Bad input"});
}
}
它是纯粹的,它是静态的,它很小,而且很容易推理。
所以我一直在阅读很多关于 java 静态方法的内容,很多人反对这一点。主要是因为可测试性。现在我完全明白了。模拟静态方法并不容易。如果我在其他单元中使用这个验证器,那么我必须要么接受它将成为测试的一部分(因为它是纯粹的,所以它可能没问题),或者使用某种静态模拟框架。
但为了使它可模拟和非静态,我必须牺牲代码的简单性和可读性。我将不得不处理创建对象,并可能将其作为参数传递给使用它的单元。
因此,从这个角度来看,我倾向于将我的纯方法设为静态,而不是去嘲笑它们。似乎让我的代码保持最简单和干净。
你觉得我对吗?我在这里缺少什么吗?
解决方案
没有副作用的方法,术语是函数,应该是静态的。而且风格很好。Math
提供了许多这样的功能。
对于测试,我们不会模拟这些功能,而是单独测试它们。
推荐阅读
- unity3d - Raycast 在 start 方法中不起作用,但在 fixupdate 方法中使用相同的代码
- java - 使用 Java 11 和 Spring Boot 调用 java.net.http.HttpClient 的响应不可靠
- javascript - 如何使用谷歌脚本从列表中返回另一个列表中不存在的值
- javascript - Adding child element to a parent element using javascript
- linux - Modifying a particular line in a text file from the command-line
- java - How to add data in Multiple Array lists?
- javascript - Why does the react-admin menu bar not redirect me to the correct resource view?
- javascript - Why does my functions.php keep crashing (wordpress)? - new to Javascript
- javascript - 将子进程输出传递到终端窗口,但也在变量中捕获
- r - 如何将函数参数从 for/if 循环传递到代码体?