当前位置: 首页 > news >正文

Code Review时学到的技巧之isAssignableFrom

🍊 Java学习:Java从入门到精通总结

🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想

🍊 绝对不一样的职场干货:大厂最佳实践经验指南


📆 最近更新:2023年4月1日

🍊 个人简介:通信工程本硕 for NJU💪、Java程序员🌕。做过科研paper,发过专利,优秀的程序员不应该只是CRUD

🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!


文章目录

  • Code Review
  • isAssignableFrom
  • 和`instanceof`的区别

Code Review

Code Review(代码审查)是指在代码合并或发布之前,由其他开发人员对代码进行检查和评估的过程,以保证代码的质量、风格、安全性和可维护性。Code Review有以下几个好处:

  1. 可以及时发现和修复代码中的错误、漏洞和不良实践,提高代码的健壮性和性能。
  2. 可以统一团队的代码规范和开发流程,提高代码的可读性和一致性。
  3. 可以促进团队的知识共享和学习,让开发人员互相交流和借鉴优秀的代码和设计。
  4. 可以增强团队的协作能力和信任感,让开发人员更加关注代码的质量而不是数量。

公司里面常用的Code Review机制主要包括以下几个方面:

  1. 每次提交代码之前都必须经过至少一个其他开发人员的审查才能合并或发布。
  2. 把Code Review变成一种开发文化而不仅仅是一种制度,即让开发人员从内心认识到Code Review的重要性和价值,并认真执行和配合。
  3. 选用合适的工具辅助做Code Review,比如Github、Gitlab、Azure DevOps等,可以方便地查看代码变更、添加评论、追踪状态等。
  4. 配合自动化测试、静态代码检查等工具做预提交检查,可以减少人为的错误和遗漏,让人类可以专注于更难搞的问题。
  5. 保持Code Review的轻量级和快速反馈,即尽量减少每次提交的代码量,及时完成审查和修改,避免拖延和堆积。
  6. 在Code Review中保持尊重和友好的态度,即审查者要给出具体和建设性的意见,被审查者要虚心接受和改进。

下面就分享一下我在上周CR的时候学到的一个技巧。


isAssignableFrom

这个方法用于判断一个类或接口是否是另一个类或接口的子类或子接口,或者是否相同。如果是,返回true,否则返回false。例如:

public class ClassDemo {public static void main(String[] args) {try {ClassDemo cls = new ClassDemo();Class c = cls.getClass();// class object associated with BaseClassClass subClass = SubClass.class;// checks whether BaseClass is assignable from ClassDemoboolean retval = subClass.isAssignableFrom(c);System.out.println("Return Value = " + retval);// checks whether ClassDemo is assignable from BaseClassretval = c.isAssignableFrom(subClass);System.out.println("Return Value = " + retval);} catch(Exception e) {System.out.println(e.toString());}}
}
// base class
class SubClass extends ClassDemo {public SubClass() {// no argument constructor}
}

输出结果是:

Return Value = false
Return Value = true

这是因为ClassDemoSubClass的父类,所以SubClass可以赋值给ClassDemo,但反过来不行。


instanceof的区别

这个方法instanceof有一些区别:

  1. instanceof是一个二元操作符,用于判断一个对象是否是一个类型的实例或子类。isAssignableFrom是一个方法,用于判断一个类或接口是否是另一个类或接口的子类或子接口,或者是否相同。
  2. instanceof只能用于引用类型,不能用于基本类型。isAssignableFrom可以用于任何类对象。
  3. instanceof在编译时需要知道右边的类型。isAssignableFrom可以在运行时动态地判断类型。
  4. instanceofnull值返回falseisAssignableFromnull值抛出异常。

实验过程如下:

int i = 10;
Integer j = 10;
System.out.println(i instanceof Integer); // 编译错误,基本类型不能用instanceof
System.out.println(j instanceof Integer); // true
System.out.println(Integer.class.isAssignableFrom(int.class)); // false
System.out.println(Integer.class.isAssignableFrom(Integer.class)); // true
System.out.println(null instanceof Integer); // false
System.out.println(Integer.class.isAssignableFrom(null)); // 运行时错误,空指针异常

这个方法通常用于反射或动态类型检查的场景。例如:
如果你想判断一个类是否实现了某个接口,可以用isAssignableFrom方法。比如:

public interface Shape { }
public class Triangle implements Shape { }
public class IsoscelesTriangle extends Triangle { }System.out.println(Shape.class.isAssignableFrom(Triangle.class)); // true
System.out.println(Shape.class.isAssignableFrom(IsoscelesTriangle.class)); // true
System.out.println(Triangle.class.isAssignableFrom(Shape.class)); // false

如果你想判断一个类是否是另一个类的父类或祖先类,你也可以用isAssignableFrom方法。比如:

public class Animal { }
public class Dog extends Animal { }
public class Poodle extends Dog { }System.out.println(Animal.class.isAssignableFrom(Dog.class)); // true
System.out.println(Animal.class.isAssignableFrom(Poodle.class)); // true
System.out.println(Dog.class.isAssignableFrom(Animal.class)); // false

如果你想在运行时动态地加载一个类,并判断它是否和另一个类兼容,你也可以用isAssignableFrom方法。比如:

Class<?> cls = Class.forName("com.example.MyClass");
if (SomeInterface.class.isAssignableFrom(cls)) {SomeInterface obj = (SomeInterface) cls.newInstance();obj.doSomething();
}

相关文章:

Code Review时学到的技巧之isAssignableFrom

&#x1f34a; Java学习&#xff1a;Java从入门到精通总结 &#x1f34a; 深入浅出RocketMQ设计思想&#xff1a;深入浅出RocketMQ设计思想 &#x1f34a; 绝对不一样的职场干货&#xff1a;大厂最佳实践经验指南 &#x1f4c6; 最近更新&#xff1a;2023年4月1日 &#x1…...

IP协议以及相关技术

这里写目录标题前言正文IP基本认识IP的作用IP和MAC的关系IP地址的基础知识IP地址定义IP地址分类(IPv4)无分类IP地址CIDR子网掩码IPv6基础知识相关技术DNS域名解析ARPDHCPNATICMPIGMP总结参考连接前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;今天我们来讲一…...

SpringBoot 项目使用 Sa-Token 完成登录认证

一、设计思路 对于一些登录之后才能访问的接口&#xff08;例如&#xff1a;查询我的账号资料&#xff09;&#xff0c;我们通常的做法是增加一层接口校验&#xff1a; 如果校验通过&#xff0c;则&#xff1a;正常返回数据。如果校验未通过&#xff0c;则&#xff1a;抛出异…...

javaScript 蓝桥杯----梅楼封的一天

目录一、介绍二、目标1.函数入参要求&#xff1a;2.出参要求&#xff1a;三、输出示例1.示例一2.示例二3.示例三4.示例四5.示例五四、待完善代码五、知识点1.正则表达式2.split方法3.test方法4.match方法5.matchAll方法6.slice方法7.replace() 方法8.repeat方法六、答案一、介绍…...

谷粒商城笔记+踩坑(18)——购物车

目录 一、环境搭建 1.1、购物车模块初始化 1.2、动静资源处理 1.3、页面跳转配置 二、数据模型分析 2.1、购物车需求 2.1.1、离线购物车和在线购物车需求、数据库选择redis 2.1.2、购物车数据结构 2.2、模型类抽取&#xff0c;Cart和CartItem 2.3、Redis依赖和配置、…...

进阶C语言:指针笔试题

在学习完进阶C指针之后&#xff0c;可以来做一些笔试题来进行提升、巩固&#xff0c;小编在这里给大家分享几道比较有意思的笔试题 目录 一、笔试题1&#xff1a; 二、笔试题2 三、笔试题3&#xff1a; 四、笔试题4&#xff1a; 五、笔试题5&#xff1a; ​编辑 六、笔试题…...

基于SSM(jsp)的宿舍管理系统

带项目源码和数据库文件 MySQL 导入即可用 可作为毕设参考 框架&#xff1a;SSM 1.1功能需求 本系统的设计目的是为了让老师可以随时随地的关注学生的在校情情况&#xff0c;方便老师对学生在校情况的添加、修改、删除和查询&#xff0c;实时关注学生的安全问题。该系统能…...

Java Web应用开发——作业四

一.单项选择题&#xff08;共3题,30.0分&#xff09; 1 如何获取一个 Cookie[]&#xff08; &#xff09; A、 request.getCookies() B、 request.getCookie() C、 response.getCookies() D、 response.getCookie() 正确答案&#xff1a; A 2 &#xff08; &#xff09;隐…...

基于ASP的反垃圾邮件管理系统的设计与实现

随着Internet的迅速普及&#xff0c;电子邮件以其快捷、方便、低成本的特点逐渐成为人们进行信息交流的主要媒介之一&#xff0c;但是随之而来的垃圾邮件也越来越泛滥。垃圾邮件占用了有限的存储、计算和网络资源&#xff0c;耗费了用户大量的处理时间&#xff0c;影响和干扰了…...

2010年9月计算机二级JAVA笔试试题及答案

一、选择题&#xff08;每小题2分&#xff0c;共70分&#xff09; 下列各题A&#xff09;、B&#xff09;、C&#xff09;、D&#xff09;四个选项中&#xff0c;只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上&#xff0c;答在试卷上不得分。 &#xff08;1&…...

博客让谷歌或是百度收录

参考以下大佬的博客教程 Hexo框架(六)&#xff1a;SEO优化及站点被搜索引擎收录设置 | 你真是一个美好的人类 第一步 安装百度和 Google 的站点地图生成插件&#xff1a; npm install hexo-generator-baidu-sitemap --save npm install hexo-generator-sitemap --save 然后来…...

机器学习分类算法评价指标

一. 分类评价指标 对机器学习算法的性能进行评估时&#xff0c;不仅需要有效可行的实验估计方法&#xff0c;还需要有衡量模型泛化能力的评价指标&#xff0c;这就是算法评价指标。分类算法的评价指标一般有准确率&#xff0c;精确率&#xff0c;召回率&#xff0c;F1-score&a…...

Socks5代理服务器示例详解

Go语言中变量的声明和JavaScript很像&#xff0c;使用var关键字&#xff0c;变量的声明、定义有好几种形式 变量和常量 // 声明并初始化一个变量 var m int 10 // 声明初始化多个变量 var i, j, k 1, 2, 3 // 多个变量的声明(注意小括号的使用) var(no intname string ) //…...

使用 Docker 和 Nginx 反向代理访问 ChatGPT API

在许多应用程序中&#xff0c;我们需要从一个外部服务中获取数据。然而&#xff0c;由于种种原因&#xff08;例如跨域问题、API 访问限制等&#xff09;&#xff0c;我们可能无法直接从客户端访问这些服务。这时&#xff0c;反向代理可以成为我们的救星。在这篇文章中&#xf…...

[前端笔记038]vue2之vueRouter、elementUI

前言 本笔记参考视频&#xff0c;尚硅谷:BV1Zy4y1K7SH p117 - p135 相关理解 vue 的一个插件库&#xff0c;专门用来实现SPA 应用单页 Web 应用&#xff08;single page web application&#xff0c;SPA&#xff09;&#xff0c;整个应用只有一个完整的页面点击页面中的导航…...

ChatGPT使用案例之操作Excel

ChatGPT使用案例之操作Excel 微软已经通过其官网宣布,正在将其基于GPT-4的人工智能(AI)技术植入到其Office办公软件当中,该功能名为“Microsoft 365 Copilot”。微软称其是基于大语言模型的下一代AI生产力技术,目前已经向部分商业用户开放。 Microsoft 365 负责人Jared …...

【算法基础】(二)数据结构 --- 单链表

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;算法基础 &#x1f525;专栏简介&#xff1a;该专栏主要更新一些基础算法题&#xff0c;有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下&#xff0c;互相监督打卡学习 &#x1f339; &#x1f339; &#x1f3…...

STL容器之<multiset>

文章目录测试环境multiset介绍头文件模块类定义对象构造初始化元素访问元素插入和删除元素查找容器大小迭代器其他函数测试环境 系统&#xff1a;ubuntu 22.04.2 LTS 64位 gcc版本&#xff1a;11.3.0 编辑器&#xff1a;vsCode 1.76.2 multiset介绍 关联式容器。元素是唯一的…...

python实战应用讲解-【numpy专题篇】numpy常见函数使用示例(三)(附python示例代码)

目录 Python numpy.finfo()函数 Python Numpy MaskedArray.masked_less()函数 Python Numpy MaskedArray.masked_less_equal()函数 Python Numpy MaskedArray.masked_not_equal()函数 Python Numpy MaskedArray masked_outside()函数 Python Numpy MaskedArray.masked_wh…...

【Android笔记89】Android之全局加载框Gloading的使用

这篇文章,主要介绍Android之全局加载框Gloading的使用。 目录 一、Gloading全局加载框 1.1、Gloading介绍 1.2、Gloading运行效果 1.3、Gloading的使用...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...