本帖最后由 小狗巧巧 于 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)。
|