草庐IT

@Nullable 注解的详细用法

ybb_ymm 2024-02-03 原文

背景

最近发现之前写的代码生成器(entity、dao、service、controller、vue) 有点bug,在Service层判断空的时候,少了一部分条件。所以补充上了,随后又同事问我在代码中发下了@Nullable注解不知道怎么用?脑子是个好东西,可以审核没带啊!哪有广告?

起初,以为这么简单的一个常用注解还不了解吗?

用法

@Nullable可以用在方法、属性、参数上。对应的意思分别如下:

方法:表示返回值可以是空

属性:表示属性值可以是空

参数:表示参数值可以是空

用在方法上

方法的返回值可以是为空,具体的用法如下方代码所示:

@Nullable
public ApiResult upload(@NotNull(message = "上传参数不能为空") @RequestParam("file") MultipartFile[] file) throws BaseException {
    ApiResult apiResult = new ApiResult();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    String format = simpleDateFormat.format(new Date());
    String realPath = filePath + File.separator + format;
    String returnPath = format;
    File targetFile = new File(realPath);
    if (!targetFile.exists()){
        targetFile.mkdirs();
    }
}

将注解用在方法商法,就可以表示这个方法的返回值可以是空。就是这么简单。

用在参数上

参数可以是为空,具体的用法如下方代码所示:

private void checkUser(String fansid, String openid, @Nullable String op) throws BaseException{
    Consumer consumer = consumerService.selectByPrimaryKey(fansid);
    if (consumer == null) {
        throw new ParamException("用户不存在");
    }
    Consumer consumer1 = consumerService.selectByPrimaryKey(openid);
    if(consumer1 == null){
        throw new ParamException("被关注者信息异常");
    }
}

用在参数上的方法也很简单,就是在参数前方加一个@Nullable注解,这样标识为这个参数可以为空。

用在属性上

属性可以为空,具体参考代码如下:

@Validated
@RestController
@RequestMapping("miniapi/follow")
public class FollowController extends BaseController {
    @Nullable
    private String isTime;
    
    @Autowired
    private FollowService followService;
    @Autowired
    private ConsumerService consumerService;
    private Logger logger = LoggerFactory.getLogger(this.getClass());
  }  

从上方我们解决的部分代码可以看出,这部分代码中在属性isTime上方标记了@Nullable注解,标识这个isTime属性可以为空。

以上,就是我们自己在使用的中的真实案例,那在我们平常引用第三方包结构中有没有引用案例呢?

Spring工具包源码中的使用案例

org.springframework.util.StringUtils中的判断空方法中用到了此方法。

就是我们所属的用在参数上面的示例:

public static boolean isEmpty(@Nullable Object str) {
   return (str == null || "".equals(str));
}

好了,今天关于@Nullable的使用情况闲聊到这,欢迎朋友们留言交流。

也希望大家关注我的《coder练习生》

有关@Nullable 注解的详细用法的更多相关文章

  1. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  2. ruby - 有人可以解释一下在 Ruby 中注入(inject)的真实、通俗易懂的用法吗? - 2

    我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有

  3. ruby - 使用法拉第上传文件 - 2

    我在尝试使用Faraday将文件上传到网络服务时遇到问题。我的代码:conn=Faraday.new('http://myapi')do|f|f.request:multipartendpayload={:file=>Faraday::UploadIO.new('...','image/jpeg')}conn.post('/',payload)尝试发布后似乎没有任何反应。当我检查响应时this是我所看到的:#:post,:body=>#,#,@opts={}>,#],@index=0>>,#>],@ios=[#,#,@opts={}>,#],@index=0>,#],@index=0>

  4. ruby - rspec: raise_error 用法来匹配错误信息 - 2

    我使用raise(ConfigurationError.new(msg))引发错误我试着用rspec测试一下:expect{Base.configuration.username}.toraise_error(ConfigurationError,message)但这行不通。我该如何测试呢?目标是匹配message。 最佳答案 您可以使用正则表达式匹配错误消息:it{expect{Foo.bar}.toraise_error(NoMethodError,/private/)}这将检查NoMethodError是否由privateme

  5. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  6. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  7. 【ChatGPT】ChatGPT 的 N 种用法 - 2

    目录ChatGPT简介技术原理应用未来发展ChatGPT的10 种用法ChatGPT简介ChatGPT是一种基于深度学习的大型语言模型,由OpenAI公司开发。技术原理GPT是GenerativePre-trainedTransformer的缩写,意为生成式预训练变压器。它的技术原理是使用了一个基于注意力机制的变压器(Trans

  8. ruby - 是否有 Rack::Session::Cookie 用法的基本示例? - 2

    我找不到任何使用Rack::Session::Cookie的简单示例,并且希望能够将信息存储在cookie中,并在以后的请求中访问它并让它过期.这些是我能找到的唯一示例:HowdoIset/getsessionvarsinaRackapp?http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html这是我得到的:useRack::Session::Cookie,:key=>'rack.session',:domain=>'foo.com',:path=>'/',:expire_after=>2592000,:secret=

  9. ruby - Ruby 方法的双冒号(双列或::)语法的惯用用法 - 2

    我是Ruby的新手,发现以下几对令人困惑示例同样有效:File.included_modulesFile::included_modulesFile.stat('mbox')#Returnsa'#'objectFile::stat('mbox')File.new("foo.txt","w")File::new("foo.txt","w")"asdf".size#Aninstancemethod"asdf"::size2+32::send(:+,3)#AnextremeexampleFile::new,尤其是我经常遇到的东西。我的问题:如果我永远避免使用::运算符来限定除类、模块和常量之

  10. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

随机推荐