返回列表 发新帖

[转载] IDEA之@Contract

[复制链接]

185

主题

7476

回帖

1万

积分

博士生

有点意思

Rank: 7Rank: 7Rank: 7

金币
4203
好评
235
信誉
101

考神MT论坛帅哥

发表于 2020-4-24 17:21:25 | 显示全部楼层 | 阅读模式  来自 河南
本帖最后由 小狗巧巧 于 2020-4-24 17:24 编辑

一个很冷门的知识,大部分人都不知道,转载一下一个详细的解释(稍有修改):
测试回复可见


@Contract 注释的使用可以通过以下示例来说明:
@Contract("_, null -> null") :如果方法的第二个参数是 null,方法返回 null。
@Contract("_, null -> null; _, !null -> !null"):如果方法的第二个参数是 null,则方法返回 null,否则为 null。
@Contract("true -> fail") :一个典型的 assertFalse () 方法,如果将 true 传递给它,则抛出一个异常。

语法:
contract ::= (clause ‘;’)* clause
clause ::= args ‘->’ effect
args ::= ((arg ‘,’)* arg )?
arg ::= value-constraint
value-constraint ::= ‘_’ | ‘null’ | ‘!null’ | ‘false’ | ‘true’
effect ::= value-constraint | ‘fail’

_ :任何价值
null:空值
!null: 一个静态证明为不是空值
true:布尔值:真
false:布尔值:假
fail :如果参数满足参数约束,该方法将抛出异常

该 @Contract 注释有两个属性: value 和 pure。
value 属性包含描述调用参数和返回值之间的因果关系的 contract 子句。
pure 属性适用于不更改其对象状态的方法,但只返回一个新值。该属性可以用作“忽略方法调用的结果”检查的提示,以指示在调用时应该使用方法的返回值。它是假(false)(默认情况下),也可以为真(true)。


已有1人评分好评 金币 理由
ypiginc + 1 + 1

查看全部评分 总评分:好评 +1  金币 +1 

回复

使用道具 举报

185

主题

7476

回帖

1万

积分

博士生

有点意思

Rank: 7Rank: 7Rank: 7

金币
4203
好评
235
信誉
101

考神MT论坛帅哥

发表于 2020-4-24 17:21:50 | 显示全部楼层  来自 河南
沙发我的
回复

使用道具 举报

8

主题

478

回帖

1367

积分

高中生

Rank: 4

金币
535
好评
0
信誉
100

MT论坛帅哥考神

发表于 2020-4-24 17:32:22 来自手机  | 显示全部楼层  来自 江西
路过瞧瞧
回复

使用道具 举报

20

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
2644
好评
9
信誉
96

考神

发表于 2020-4-24 18:35:32 来自手机  | 显示全部楼层  来自 河北
感谢分享
回复

使用道具 举报

185

主题

7476

回帖

1万

积分

博士生

有点意思

Rank: 7Rank: 7Rank: 7

金币
4203
好评
235
信誉
101

考神MT论坛帅哥

发表于 2020-4-24 18:36:05 | 显示全部楼层  来自 河南

嗯。。                    
回复

使用道具 举报

6

主题

860

回帖

8723

积分

硕士生

1

Rank: 6Rank: 6

金币
1070
好评
0
信誉
101

考神

发表于 2020-4-24 18:37:51 来自手机  | 显示全部楼层  来自 黑龙江
谢谢老哥分享
回复

使用道具 举报

10

主题

2210

回帖

9494

积分

硕士生

萌新

Rank: 6Rank: 6

金币
5327
好评
6
信誉
101

MT论坛帅哥考神MT论坛最佳新人MT论坛活跃会员MT论坛新人

发表于 2020-5-2 12:12:10 | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

2

主题

119

回帖

268

积分

初中生

Rank: 3Rank: 3

金币
32
好评
0
信誉
100
发表于 2022-1-29 08:33:50 来自手机  | 显示全部楼层  来自 重庆
感谢大佬分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表