接口约束的另一种方法: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 demo之时间
jdk原生 public class Start { public static void main(String[] args) { SimpleDateFormat simpleDateForma ...
- Linux命令:help
语法 help: help [-dms] [模式 ...] 显示内建命令的相关信息. 显示内建命令的简略信息.如果指定了 PATTERN 模式,给出所有匹配 PATTERN 模式的命令的详细帮助,否则 ...
- IBM MQ 使用指南
一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列(Queue)和通道(Channel).其基本的操作方法如下: 1)创建队列管理器 crtmqm –q QMg ...
- 【第二组】Hunter-alpha版本发布报告
Alpha版本测试报告 一 BUG汇总 1.暂时无法进行注册.(打算修复) 2.用户发布任务界面图标按钮存在显示bug.(打算修复) 3.主界面下拉菜单暂无内容,无法弹出.(打算修复) 二 场景测 ...
- Linux 标准输入输出、错误输出、重定向标准输出
再来看看 >& 操作符: 重定向操作符 描述 > 将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄. < 从文件而不是从键盘或句柄读入命令输入. >& ...
- js判断访问浏览器是安卓还是ios还是微信浏览器还是微博
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- maven的pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 25. Reverse Nodes in k-Group (JAVA)
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- ELK-Elasticsearch 安装启动
系统版本:Centos7 Elasticsearch:5.3.1 1:关闭SELinux [root@es local]# sed -i 's/SELINUX=enforcing/SELINUX=di ...
- c# 判断当前版本是Debugger或Release
1.第一种 (常用) #if DEBUG //debugger 环境 #else //release 环境 #endif 2. 第二种 private bool IsDebug() { Assembl ...