当前位置:网站首页>key为断言的map是怎么玩的
key为断言的map是怎么玩的
2022-06-12 16:32:00 【怎么又有bug单】
前言
在进入主题前,我们首先普及一下什么是断言,因为这也是java8的新特性,有些小伙伴可能还不清楚。
而map,我们就不多解释了。。
什么是断言
传统的断言
断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。
除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。
使用断言使我们向按契约式设计更近了一步。
断言可以有两种形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。
java中的断言
java中的断言也有assert,但其实我们这里想讲的是Predicate,这是一个判断是否满足条件的函数
代码怎么写?
看了如上这么多概念,可能读者还是不太理解我想表达什么,那我们直接上代码:
首先是service:
public class TestStaticService {
private static final Map<Predicate<Integer>, String> BIZ_TYPE_DECIDE_MAP = Maps.newLinkedHashMap();
static {
BIZ_TYPE_DECIDE_MAP.put(integer -> integer.equals(1), "这是1");
BIZ_TYPE_DECIDE_MAP.put(integer -> integer.equals(2), "这是2");
BIZ_TYPE_DECIDE_MAP.put(integer -> integer.equals(3), "这是3");
}
public String doService(Integer integer){
Optional<Map.Entry<Predicate<Integer>, String>> first =
BIZ_TYPE_DECIDE_MAP.entrySet().stream().filter(entry -> entry.getKey().test(integer)).findFirst();
return first.get().getValue();
}
}
调用的测试类:
@Test
public void test45(){
TestStaticService testStaticService = new TestStaticService();
System.out.println(testStaticService.doService(2));
}
结果是,输出:“这是2”
这段代码最重要的点在于:
表面上是调用doService方法,实际上是先执行静态代码块,这句话读懂,应该就不难理解了吧_
边栏推荐
- PostgreSQL source code (53) plpgsql syntax parsing key processes and function analysis
- RTOS RT thread bare metal system and multi thread system
- Servlet API
- WebRTC 的音频网络对抗概述
- acwing 802. Interval sum (discretization)
- canvas 高级功能(下)
- MySQL interview arrangement
- Project training of Shandong University rendering engine system (II)
- 程序的动态加载和执行
- Servlet API
猜你喜欢

Canvas advanced functions (Part 2)

Overview of webrtc's audio network Countermeasures

并发包和AQS

Anyone who watches "Meng Hua Lu" should try this Tiktok effect

The market share of packaged drinking water has been the first for eight consecutive years. How does this brand DTC continue to grow?

Acwing 798 two dimensional difference (difference matrix)

'virtue and art' in the field of recurrent+transformer video recovery

What's the matter with pbootcms' if judgment failure and direct display of labels?

【湖南大学】考研初试复试资料分享

有哪些特容易考上的院校?
随机推荐
canvas 高级功能(下)
CAS optimistic lock
[DSP video tutorial] DSP video tutorial Issue 8: performance comparison of DSP library trigonometric function, C library trigonometric function and hardware trigonometric function, and accuracy compar
The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.8 其它函数
<山东大学项目实训>渲染引擎系统(三)
How to construct PostgreSQL error codes
Gopher to rust hot eye grammar ranking
The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.7 实例(存储分配程序)
generate pivot data 0
Leetcode 2194. Cellules dans une plage dans un tableau Excel (OK, résolu)
数据库的三大范式
3/6 线性系统的时域分析法(上)
The C programming language (version 2) notes / 8 UNIX system interface / 8.2 low level i/o (read and write)
h t fad fdads
Probation period and overtime compensation -- knowledge before and after entering the factory labor law
CAS乐观锁
acwing 803. Interval merging
Sum of acwing796 submatrix
h t fad fdads
1.delete