接口约束的另一种方法:Class类的isAssignableFrom
Class类的isAssignableFrom是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下:
public native boolean isAssignableFrom(Class<?> cls);
由方法签名可见是一个本地方法,即C代码编写的。
以下是JDK中的注释:
Determines if the class or interface represented by this Class object is either the same as,
or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
It returns true if so; otherwise it returns false.
If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false.
意思如下:
有两个Class类型的类象,一个是调用isAssignableFrom方法的类对象(后称对象a),以及方法中作为参数的这个类对象(称之为对象b),这两个对象如果满足以下条件则返回true,否则返回false:
a对象所对应类信息是b对象所对应的类信息的父类或者是父接口,简单理解即a是b的父类或接口
a对象所对应类信息与b对象所对应的类信息相同,简单理解即a和b为同一个类或同一个接口
测试代码:

//说明:Protocol是接口,DubboProtocol是Protocol的实现
Class protocolClass = Protocol.class ;
Class dubboProtocolClass = DubboProtocol.class ; protocolClass.isAssignableFrom(dubboProtocolClass )) ; //返回true
protocolClass.isAssignableFrom(protocolClass )) ; //返回true
dubboProtocolClass.isAssignableFrom(protocolClass )) ; //返回false typeof(IHasOwner).IsAssignableFrom(typeof(TSource)) //判断TSource是否继承IHasOwner接口
接口约束的另一种方法:Class类的isAssignableFrom的更多相关文章
- mybatis中mapper接口的参数设置几种方法
方法一:忽略parameterType,加@param("xxx")注解 在mapper接口中加上@param("xxx")注解,则在配置文件中直接用即可 Li ...
- 客户端服务器通讯常用的一种方法——Marshal类
这个类是.NETFramework2.0中的类,所以我们能够将其用于Unity中.与这个类类似的还有litjson等,可能是为了节省字节空间,Marshal类只仅仅将值进行打包成bytes流,而jso ...
- Postman调试依赖登录接口的3种方法
在接口测试种, 我们经常会遇到有些接口登录后才能访问.我们在使用Postman调试这种接口时一般有3种方法: 依次请求 如果有登录接口的文档,或者通过抓包比较容易抓出登录请求的参数和格式,可以先使用P ...
- AE 将地图导出为图片的两种方法
在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或Layout中的图象转出有两种方法,一种为通过IActiveView的OutPut函数,另外一种是通过IExpor ...
- 增强for循环、Map接口遍历、可变參数方法
增强for循环 1.for循环能做得事情.增强for循环大部分都能做(假设要想获得下标的时候就必须使用简单for循环了) 2.增强for有时候可以方便的处理集合遍历的问题,可是集合的标准遍历是使用迭代 ...
- Java反射定义、获取Class三种方法
反射机制的定义: 在运行状态时(动态的),对于任意一个类,都能够得到这个类的所有属性和方法. 对于任意一个对象,都能够调用它的任意属性和方法. Class类是反射机制的起源,我们得到Class类对象 ...
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- Servlet接口五种方法介绍
Servlet接口定义了5种方法: init() service() destroy() getServletConfig() getServletInfo() init() 在Servlet实例化后 ...
- FPGA时序约束的几种方法 (转)
FPGA时序约束的几种方法 对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地, ...
随机推荐
- java使用Filter过滤器对Response返回值进行修改
转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...
- 结对项目-WordCount
结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...
- cent os安装filebeat
先贴一下官方文档https://www.elastic.co/guide/en/beats/filebeat/6.6/filebeat-installation.html 我本次使用rpm的方式安装, ...
- Ubuntu 18.04 安装部署Net Core、Nginx全过程
Ubuntu 18.04 安装部署Net Core.Nginx全过程 环境配置 Ubuntu 18.04 ,Nginx,.Net Core 2.1, Let's Encrypt 更新系统 sudo a ...
- pyqgis学习
1. 错误:ImportError: No module named qgis.core解决方法:python的qgis,初始化变量:D:\PROGRA~1\QGIS3~1.0\OSGeo4W.bat ...
- javascript中的map和reduce
今天在看“廖雪峰官方网站”的js教程时,看到了map和reduce.其中有一个练习题是:不使用js内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数(先将 ...
- flask接收post提交的json数据并保存至数据库
定义数据模型 # 定义数据模型class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(d ...
- Jenkins解析日志(log-parser-plugin)
Jenkins打包机打包时产生了大量的日志,当报错时,不方便查看error日志 因为日志量太大,查看全部log的时候整个web页面会卡死,所以引用log-parser-plugin可以增加过滤条件显示 ...
- leetcode 动态规划类型题
1,Triangle int mininumTotal(vector<vector<int>>& triangle) { ; i >= ; --i) { ; j ...
- 项目中PO、PM的职责区分
PO是product owner,是一个role,负责与stakeholders打交道,提炼stakeholders的需求,按照需求的价值以及紧急程度安排优先级.PO是一个角色,对product ba ...