第二十七条:消除unchecked类型的警告

首先要说明一下此次advice在正式项目中经常会用到。

当你使用范型的时候,可能会经常看到各种各样的编译器警告:未检查方法调用警告、未检查变量类型警告、未检查转换警告等等。很多未检查警告很容易被消除

例如,假如你写了这样的代码:

此时编译器会警告你:Venery.java:4: warning: [unchecked] unchecked conversionSet exaltation = new HashSet();^required: Setfound: HashSet

要消除这里的警告,可以使用钻石符号(<>),编译器可以自己推断出真实的类型(这里是Lark):

Set exaltation = new HashSet<>();

当你遇到一些很难消除的警告时,持之以恒,尽可能的将其解决!当你消除了所有的警告时,好处是就可以确定你的代码是类型安全的。意味着在运行时你不会遇到ClassCastException的异常。

当你遇到你不能消除的警告时,如果你能保证被警告的代码类型是什么,就可以使用(也只能使用这种方式)@SuppressWarnings(“unchecked”)注解来消除警告。但是当你不能确保其类型的时候,就不要使用这个注解消除警告,因为即使你在编译期间消除了警告,在运行时也可能会报出ClassCastException的异常。

当你遇到你不能消除的警告时,如果你能保证被警告的代码类型是什么,就可以使用(也只能使用这种方式)@SuppressWarnings(“unchecked”)注解来消除警告。但是当你不能确保其类型的时候,就不要使用这个注解消除警告,因为即使你在编译期间消除了警告,在运行时也可能会报出ClassCastException的异常。

SuppressWarnings注解可以用在声明任何对象时,例如声明一个变量、方法、结构体或类等。但是永远要保证尽可能小范围的使用SuppressWarnings注解。不要对整个类使用SuppressWarnings,因为这样可能会掩盖掉严重的警告。

如果你发现你要使用SuppressWarnings注解在一个对象(方法或结构体等)上长度超过了一行,那么你可以通过移动这个对象成为一个本地的变量解决。虽然这样需要声明一个本地变量,但是这是值得的。例如,ArrayList中的toArray方法:

  public <T> T[] toArray(T[] a){if(a.length < size){T[] result=(T[])Arrays.copyOf(elements,size,a.getClass());return result}System.arraycopy(elements,0,a,0,size);if(a.length > size)a[size] = null;return a;}

难以消警告,添加@SuppressWarning(“unchecked”)注解来消除这条警告。

public <T> T[] toArray(T[] a) {if (a.length < size) {@SuppressWarning("unchecked")T[] result = (T[]) Arrays.copyOf(elements, size, a.getClass());return result;}System.arraycopy(elements, 0, a, 0, size);if (a.length > size)a[size] = null;return a;}

每次当你使用@SuppressWarnings("unchecked")注解时,都应该添加一条注释,说明为什么这么做是安全的。这样做不仅可以使其他人更容易读懂,而且防止别人随意更改代码。

总而言之,非受检警告很重要,不要忽略它们。每一条警告都表示可能在运行时抛出ClassCastException异常。要尽最大的努力去消除这些警告。如果无法消除但是可以证明引起警告的代码是安全的,就可以在尽可能小的范围中,使用@SuppressWarnings(“unchecked”)注解来禁止警告,但是要把禁止的原因记录下来。

 所有文章无条件开放,顺手点个赞不为过吧!

                                                  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488528.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

图像生成中图像质量评估指标—PSNR的详细介绍

文章目录 1. 背景介绍2. 实际应用3. 总结和讨论 1. 背景介绍 峰值信噪比&#xff08;Peak Signal-to-Noise Ratio&#xff0c;简称PSNR&#xff09;是一种广泛应用于图像和视频处理领域的客观图像质量评价指标。它主要用于衡量图像的噪声水平和图像质量&#xff0c;可以用来评…

PySide(PyQt)使用QPropertyAnimation制作动态界面

主脚本&#xff1a; # encoding: utf-8 import os import sysfrom PySide6.QtCore import QPropertyAnimation, QEasingCurvefrom UIS import *# 主画面类 class MainWindow(QMainWindow, animationButton_ui.Ui_MainWindow):def __init__(self):super().__init__()self.setup…

基于FPGA读写AT24C256 EEPROM芯片

在FPGA上面根据IIC接口协议用verilog语言读写AT24C256 EEPROM芯片 目录 前言 一、EEPROM简介 二、管脚信息 三、IIC协议 四、读写模式 五、字节写 六、随机地址读 七、参考资料 总结 前言 EEPROM (E2PROM&#xff0c;Electrically Erasable Progammable Read Only Mem…

基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 粒子群优化算法&#xff08;PSO&#xff09; 4.2 分组卷积神经网络&#xff08;GroupCNN&#xff09; 4.3 PSO优化GroupCNN 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行…

Golang实现Word模板内容填充导出

这里我们使用一个广泛使用且免费处理 .docx 文件的库&#xff0c;github.com/nguyenthenguyen/docx. 安装 github.com/nguyenthenguyen/docx 库 首先&#xff0c;确保你已经安装了 docx 库&#xff1a; go get github.com/nguyenthenguyen/docx使用 docx 库处理 Word 模板 …

【odoo17 | Owl】前端js钩子调用列表选择视图

概要 在我们选择多对一或者多对多字段的时候&#xff0c;经常看到可以弹出列表弹窗让人一目了然的效果&#xff0c;效果如下&#xff1a; 那么&#xff0c;这种效果是odoo本身封装好的组件&#xff0c;我们在平时的前端界面开发的时候&#xff0c;既不是后端视图的情况下&#…

收银系统对零售连锁门店有什么作用?

随着人们生活水平的提高&#xff0c;各类零售门店也越来越多&#xff0c;对于零售连锁门店来说&#xff0c;如何提高客流量和客户忠诚度&#xff0c;提高会员的单次消费能力是一个重大的问题&#xff0c;能够决定性影响门店盈利额&#xff1b;从收银软件出发&#xff0c;一款好…

在服务器上同时训练多个深度学习模型【nohup、后台、重定向】

在服务器上同时训练多个深度学习模型 在服务器上跑深度学习或其他程序时&#xff0c;如果程序没有提供命令行参数设置&#xff0c;我们常常需要多次修改代码后重新部署。本文将介绍如何通过命令行工具和编辑器查看代码特定行的方法&#xff0c;并展示如何同时训练多个基于不同…

Odoo 17 仪表盘开发指南:打造高效的数据可视化中心

在现代企业管理中,数据驱动的决策至关重要。Odoo 17 提供了强大的平台来构建自定义仪表板, 适用于数据统计、工作台、驾驶舱、数据可视化等场景,以便用户能够一目了然地监控关键指标并做出及时反应。本文将介绍如何在 Odoo 17 中开发一个灵活且高度定制化的仪表盘系统,包括…

opencv - py_calib3d - py_depthmap 来自立体图像的深度图

Depth Map from Stereo Images 来自立体图像的深度图 目标 在本课程中&#xff0c; 我们将学习从立体图像创建深度图。 基础知识 在上一节中&#xff0c;我们了解了极线约束和其他相关术语等基本概念。我们还看到&#xff0c;如果我们有两张相同场景的图像&#xff0c;我们…

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的&#xff0c;所谓文档是一种类似于json的结构。 官网教程&#xff1a;https://www.mongodb.com/docs/manual/ 2 安装部…

开源AI智能名片商城小程序:重塑中国市场智能化营销的新篇章

摘要 在数字化转型的加速推进下&#xff0c;中国市场的营销领域正经历着前所未有的变革。开源AI智能名片商城小程序作为一种创新的商业模式&#xff0c;融合了精准营销、智能搜索、语音识别、图像识别及创意内容生成等前沿技术&#xff0c;旨在为企业提供一个高效、个性化且用…

IOS微软语音转文本,lame压缩音频

在IOS开发中&#xff0c;用微软进行语音转文本操作&#xff0c;并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作&#xff0c;如果操作失败&#xff0c;那么就利用原始音频文件通过网络请求操作&#xff0c;最终这份文件上传到阿里云保存&#xff0c;考…

学习测试14-实战2-介绍CANoe工具

功能&#xff1a; 1&#xff0c;半仿真测试&#xff08;台架测试&#xff09;&#xff1a;台架上做测试 2&#xff0c;全仿真测试&#xff1a;无实体测试&#xff0c;全模拟 3&#xff0c;截取实车日志&#xff1a;故障报告&#xff0c;对照诊断说明 4&#xff0c;诊断测试组成…

机器学习笔记-01-初识基础(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…

使用 Visual Studio 2022 自带的 cl.exe 编译 tensorRT自带测试样例 sampleOnnxMNIST

1. 新建任意文件夹&#xff0c;将 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sampleOnnxMNIST.cpp 文件复制进来&#xff0c;同时 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sample_onnx_mnist.vcxproj 中的内容&…

江科大/江协科技 STM32学习笔记P13

文章目录 TIM定时中断1、TIM简介计数器预分频器自动重装寄存器 2、定时器类型基本定时器主模式触发DAC 通用定时器高级定时器 3、定时器原理定时中断基本结构预分频器时序计数器时序RCC时钟树 TIM定时中断 1、TIM简介 定时器的基准时钟一般都是主频72MHz&#xff0c;如果对72M…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此&#xff0c;一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中&#xff0c;研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

分享一个好用的音频解码工具——音乐解锁

在酷狗、网易云、虾米、酷我等平台下载的音乐只能在各自平台的播放上播放。比如&#xff0c;kgm转MP3的方法想必大家在网上也寻找了各种解决方法&#xff0c;方法也不少&#xff0c;但大多数都是不好用或者需要充米。有没有白嫖的工具呢&#xff1f;当然有了&#xff0c;白嫖是…

如何使用 DSPy 构建多步骤推理的 RAG 系统

一、前言 检索增强生成 (RAG) 系统已经成为构建基于大语言模型 (LLM) 应用的强大方法。RAG 系统的工作原理是&#xff1a;首先使用检索模型从外部知识源检索相关信息&#xff0c;然后使用这些信息来提示 LLM 生成最终的响应。 然而&#xff0c;基本的 RAG 系统&#xff08;也…