JetBrains注解@NotNull/@Nullable/@Contract

2023-11-06

JetBrains 的注解库,然后通过在 IDE 里面提示你处理那些可能为 null 的值(编译器没法检查并提示)避免NullPointerException。

对于空指针异常,Java 只有 IDE 警告。

正式名称叫: inferred annotations 推断注解

  1. 注解出现在2010年
  2. 自动提示出现在2014年
  • 依赖
annotations-java8.jar

这个包在任何一个 JetBrains IDE 的安装目录里面都有。

1、@TestOnly- 仅测试用

import org.jetbrains.annotations.TestOnly;

用于标记,专门给单元测试服务相关代码的注解。

2、@NotNull 和 @Nullable

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

一般被用来注解带有返回值的方法、方法参数、类的成员变量。

  1. 当 @NotNull 注解一个方法参数的时候, IDE 会在调用处提示你处理 null 的情况(当然,如果 IDE 语义上认为你传进去的参数不可能是 Null ,那么当然没有提示了); 当它注解一个有返回值的方法的时候,它会检查返回值是否可能是 null 。如果可能,那也会有提示。
  2. 当 @Nullable 注解一个方法参数的时候, IDE 会在方法内部提示你处理该参数为 null 的情况; 当它注解一个有返回值的方法的时候,会在调用处提示你处理方法返回值为 null 的情况。

3、@Nls 和 @NonNls

import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;

用于修饰字符串

  1. @Nls 用于修饰自然语言字符串;e.g. “今天,你好”
  2. @NonNls 用于修饰非自然语言;e.g. “dfisfjix”

4、@Contract

import org.jetbrains.annotations.Contract;

e.g. @Contract(value = “null -> false”, pure = true)

我称其为约定注解。这是一个有属性、用于修饰带参数并且返回值不为 void 的普通方法构造方法的注解,这个注解有两个属性。一个 value 的字符串属性,还有一个 pure 的布尔属性。

  1. 能描述的内容更详细,能在一定程度上代替 @NotNull 和 @Nullable
  2. pure,表示被注解的函数(包含普通方法、静态方法和构造方法)是否为纯函数。

纯函数:如果一个函数,对于特定的输入,都将产生对应的唯一的输出,并且不会影响别的东西(即没有副作用),那么这个函数就是纯函数。F(x) = 2x…;可以看出是幂等的

  1. value
    场景:你给我 null ,我就还你 false
@Contract(value = "null -> false", pure = true)
public boolean equals(@Nullable Object obj) {

可用值:

null // null
!null // not null
true // boolean value true
false // boolean value falses
fail // means this function will not work in this case
_ // any value

下划线代表通配符
e.g. 返回值为非 null(@NotNull)。然后传进来任何值(两个参数_代表任意),都不会返回null。纯函数(pure = true)

@NotNull
@Contract(value = "_, _ -> !null", pure = true)
public static ExgcdRes exgcd(long a, long b) {
	return new ExgcdRes(exgcdJni(a, b));
}

最后如何在自己的代码中自动显示

  1. Press Ctrl+Alt+S to open IDE settings and select Editor | Inlay Hints | Java | Annotations.
  2. Make sure that the Show hints for option is enabled and select the Inferred annotations checkbox.
  3. Apply the changes and close the dialog.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JetBrains注解@NotNull/@Nullable/@Contract 的相关文章

随机推荐

  • SM9 用户私钥在线分发技术

    摘要 SM9 密码算法属于基于标识的密码 Identity Based Crytograph IBC 体系 它利用用户终端的标识替代或将其演化为公钥 无须公钥证书授权 Certificate Authority CA 降低了密钥资源管理和部
  • ES6之Set、WeakSet、Map、WeakMap

    Set WeakSet Map WeakMap 循序渐进 Set WeakSet Map WeakMap 一 Set 二 WeakSet 三 Map 一 Set ES6 提供了新的数据结构 Set 它类似于数组 但是成员的值都是唯一的 没有
  • AI落地:高效学习指南

    高效学习中有一个共识 学习最小可用知识 然后立马开始实践 做中学 不断获得反馈 不断在实践中改进 现实生活中 如果我们想实现这种高效学习 基本上只能找一个老师1对1指导 费用贵不说 找到合适的老师更是可遇不可求的事情 但是有了ChatGPT
  • linux2.6.29 CFS调度详细分析

    linux2 6 29 CFS调度详细分析 众所周知 linux最新的内核采用了CFS的调度机制 网上也有不少文章对CFS调度的源码做了详细的分析 但是大部分的文章太注重细节了 所以没有把CFS的原理进行一下从整体上的概括 基于这个原因 本
  • 时间复杂度O(nlogn)的排序算法

    时间复杂度O nlogn 的排序算法有四种 分别是希尔排序 堆排序 快速排序和归并排序 这四个排序都非常重要 希尔排序 希尔排序本质上是插入排序的优化 先对间隔较大的元素进行插入排序 完成宏观调控 然后逐步缩小间隔 最后一轮一定是间隔为 1
  • CAP迷思:关于分区容忍性

    点击上方 分布式实验室 关注公众号 回复 1 抽取技术书 CAP理论是分布式存储系统的热门话题 然而 它被大量误用了 在本文中 我想强调为什么通常的说法 一致性 C 可用性 A 和分区容忍性 P 只能选择两个 对分布式系统来说 是不适当的
  • 结冰过程渲染-Ovito实现

    关注 M r m a t e r
  • Python 自动化测试实战

    一 Python实现HTTP接口测试 1 接口测试概述 1 接口测试简介 首先谈谈接口测试 接口测试和日常的人工测试不同 它往往不是一个对完整功能的测试 而是对某个服务的函数或者对外暴露的访问接口进行测试 测试的目的是检测该接口是否稳定可靠
  • python 版本错误导致的 roscore 问题

    这几天快疯了 ROS好多坑 提醒一下python的版本不要随意切换哈 我的python 从自带的python 2 7变成 python 3 6后出现很多的问题 其中一个就是 roscore问题 问题如下 Traceback most rec
  • 解决Error starting ApplicationContext.To display the conditions report re-run your application xxx的问题

    目录 1 配置文件的错误 2 编译的错误 3 定义请求接口重复的错误 4 没加 Mapper注解的错误 5 端口重复错误 6 包冲突的错误 7 总结 解决Error starting ApplicationContext To displa
  • mongod连接数据库被拒绝

    这周想着写一下实训项目 但是连接数据库的时候无论如何都连接不上 问题是单独写了一个连接文件运行时是可以连接上的 但是在那个项目里边一直显示连接被拒绝 const mongoose require mongoose 链接数据库 mongoos
  • 计算机网络--谢希仁--重要知识点整理

    由于我近期在复习计算机网络的时候无意间在网上发现了一个比较不错的文章 这位大佬归纳得很详细 所以我在这边转载一下分享给大家 文章作者 烟雨迷离半世殇 文章链接 计算机网络重点知识整理 烟雨迷离半世殇的成长之路 雄关漫道真如铁 而今迈步从头越
  • python Hill密码

    以下python代码用于生成Hill密码的密钥矩阵及其逆矩阵 PydevCodeAnalysisIgnore input N output a pair of matrix which is inverse matrix of anothe
  • epoll基本原理及使用框架

    epoll基本原理及使用框架 epoll是Linux下多路复用IO接口select poll的增强版本 它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 因为它不会复用文件描述符集合来传递结果而迫使开发者每次等待事件之
  • 从零玩转系列之微信支付实战PC端接口搭建

    一 前言 halo各位大佬很久没更新了最近在搞微信支付 因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联 至此微信支付Native支付完成 此篇文章过长我将分几个阶段的文章发布 项目源码都有 小程序和PC端 在此之前
  • 毕业设计-基于机器视觉的回转体零件表面缺陷检测研究-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 回转体零件的图像预处理 二 图像分割 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要
  • elementUI中el-tabs组件接口多次请求解决方案

    首先看代码
  • 软件测试学习路线-基础篇

    目录 功能测试 自动化测试Selenium和Appium 接口测试Jmeter 性能测试Loadrunner 软件测试自学实践部分比较难 因为需要找到有问题的源代码进行测试 更建议跟团队一起学习 下面讲讲软件测试的学习路线 希望对你有所帮助
  • Go项目配置管理工具---Viper

    目录 Viper概述 前言 功能 viper配置优先级 从Viper中获取值 读取配置文件 注册和使用别名 把值写入Viper 设置默认值 使用Set方法设置值 把配置信息写入配置文件 从io Reader中读取配置信息到viper 监控V
  • JetBrains注解@NotNull/@Nullable/@Contract

    JetBrains 的注解库 然后通过在 IDE 里面提示你处理那些可能为 null 的值 编译器没法检查并提示 避免NullPointerException 对于空指针异常 Java 只有 IDE 警告 正式名称叫 inferred an