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

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...