当前位置: 首页 > 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的使用...

php微信小程序java+Vue高校课程课后辅导在线教育系统nodejs+python

目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.1 B/S架构 7 2.2 MySQL 介绍 7 2.3 MySQL环境配置 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 …...

公司刚来的00后真卷,上班还没2年,跳到我们公司起薪20k....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…...

Intel 处理器 macOS降级到Big Sur

1 创建可引导的 macOS 安装器 将移动硬盘作安装 Mac 操作系统的启动磁盘。 创建可引导安装器需要满足的条件 移动硬盘&#xff08;格式化为 Mac OS 扩展格式&#xff09;&#xff0c;至少有 14GB 可用空间已下载 macOS Big Sur的安装器 2 下载 macOS macOS Big Sur安装器会…...

【网络安全】记一次红队渗透实战项目

一、信息收集 信息收集非常重要&#xff0c;有了信息才能知道下一步该如何进行&#xff0c;接下来将用 nmap 来演示信息收集 1、nmap 扫描存活 IP 由于本项目环境是 nat 模式需要项目 IP 地址&#xff0c;扫描挖掘本地的 IP 地址信息&#xff1a; 本机 IP 为&#xff1a;192…...

异想天开!没有CPU的操作系统

【引子】“The Last CPU”&#xff08;https://doi.org/10.1145/3458336.3465291&#xff09;&#xff0c;ACM上的这一篇论文非常有趣&#xff0c;核心思想是如果计算机的体系结构中没有了CPU&#xff0c;那么&#xff0c;操作系统又会是怎样的呢&#xff1f;......不敢私藏&am…...

ChatGPT背后的指令学习是什么?PSU最新首篇《指令学习》技术全面综述,详述指令学习关键问题

来源: 专知 任务语义可以用一组输入到输出的例子或一条文本指令来表示。传统的自然语言处理(NLP)机器学习方法主要依赖于大规模特定任务样本集的可用性。出现了两个问题: 首先&#xff0c;收集特定于任务的标记示例&#xff0c;不适用于任务可能太复杂或太昂贵而无法注释&#…...

【Python】《我的世界》简简单单就可以完成?OMG~(附教学)

文章目录前言一、准备二、运行及操作三.代码解读与自定义总结前言 《我的世界 Minecraft》大家应该都听说过&#xff0c;但你有没有想过自己写一个这样的游戏呢&#xff1f;太难、太复杂了&#xff1f;也许吧&#xff0c;但是不试一试你怎么知道能不能成呢&#xff1f; 国外有…...

【SpringSecurity】认证授权框架——SpringSecurity使用方法

【SpringSecurity】认证授权框架——SpringSecurity使用方法 文章目录【SpringSecurity】认证授权框架——SpringSecurity使用方法1. 概述2. 准备工作2.1 引依赖2.2 测试3. 认证3.1 认证流程3.2 登录校验问题3.3 实现3.3.1 实现UserDetailsService接口3.3.2 密码存储和校验3.3.…...

java的Lambda表达式与方法引用详解

1. 定义 Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 1.1 通用定义 lambda 表达…...

JUnit5用户手册~并行执行

两种运行模式 SAME_THREAD&#xff1a;默认的&#xff0c;测试方法在同一个线程CONCURRENT&#xff1a;并行执行&#xff0c;除非有资源锁junit-platform.properties配置参数配置所有测试方法都并行 junit.jupiter.execution.parallel.enabled true junit.jupiter.execution.…...