如何写出健壮的 Java 代码!
如何写出健壮的 Java 代码?我相信这是很多人都有的疑惑或者想要的答案。今天我们抽个时间一起探讨一下!
说实话,看到这个问题我也不知道如何回答为好!所以我也需要答案!
于是我就去百度,谷歌。各种搜索,寻找各种编程技巧和学习方法。搜索之后,发现网上的很多结论都不太理想,于是就需要我自己去思考,去探索如何让自己写的代码更健壮!
没有答案之后,我就换了一种想法。Spring 框架大家都在使用吧,Spring 框架肯定也都和健壮吧,于是我就是 Spring 框架中寻找答案!
当然,绝不仅仅是 Spring 框架,还包括其他一些框架的源码。多去看它们的源码,去寻找答案。
下面我总结一些关于代码健壮的相关建议。
第一个,我发现 Spring 框架源码中存在各种各样的断言。Assert.isNull()、Assert.notNull()、Assert.state()、Assert.isTrue()、Assert.notEmpty() 等。
他们把非常多的 if 判断是否为空,参数是否合法等都给封装起来了,代码显的非常简洁。
尽管 Spring Assert 与其他框架的名称类似,如 JUnit 或其他框架,但其实没有任何共同之处。Spring Assert 不是为了测试,也不是为了调试,而是为了方便校验一些参数。
int speed = 0;
Assert.isTrue(speed > 0, "speed must be positive");
String state = "";
Assert.state(state.equals("stop"), "car must be stopped");
Assert.notNull(state, "state mustn't be null");
Assert.isNull(state, "to replace battery the charge must be null");
Assert.isInstanceOf(String.class, state,"www.xttblog.com");
Assert.isAssignable(String.class, Object.class,"www.xttblog.com");
String key = "";
Assert.hasLength(key, "key must not be null and must not the empty");
Assert.hasText(
key,
"key must not be null and must contain " +
"at least one non-whitespace character");
Assert.doesNotContain(key, "123", "key mustn't contain 123");
除了上面这些,Spring 框架中的很多工具类,你会发现里面有很多的静态方法。这个类要么是 final 类型的,然后构造函数私有化。要么就是一个抽象类 abstract。你以后的写的类中全是静态方法的话,就可以这样做。
另外还有一些 PO、VO、DO 等类要分清楚它们各自的用途。不然会扯出不少的水平权限漏洞和垂直权限漏洞。
不能把自己程序的健壮性建立在别人代码正确的基础上,这种依赖如果成了习惯,会麻痹自己的警觉性。要做到即使是别人错了,我们的程序依然能正常运行。使用别人的参数,必须要自己在校验一遍。最常见的就是前端做了校验,后端不做校验。
对于调用的方法中如果有异常抛出,尽量要自己 try–catch 语句块,以防发生非预期的结果。
给每个 if(condition){} 都加上大括号,即使里面只有一句话。阿里巴巴 Java 开发规范手册中明确强调的。
常量类中,尽量写一些内部类,把常量进行区分。很多常量类中的常量高达上百个,没有一点归类。
千万别自己随意的重复造轮子,多用一些框架中自带的工具类。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/04/19 10:11