instanceof 与isAssignableFrom
instanceof 针对实例
isAssignableFrom针对class对象
isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
通常调用格式是
- Class1.isAssignableFrom(Class2)
调用者和参数都是 Java.lang.Class 类型。
而 instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。
格式是:
- oo instanceof TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如 String,InputStream。
- public class Test {
- public static void main(String[] args) {
- List<String> list = new ArrayList<String>();
- System.out.println(list instanceof List);
- System.out.println(list instanceof ArrayList);
- /* System.out.println(list.getClass());
- System.out.println(List.class);
- System.out.println(ArrayList.class);*/
- System.out.println(list.getClass().isAssignableFrom(List.class));
- System.out.println(List.class.isAssignableFrom(list.getClass()));
- }
- }
结果:
true
true
false
true
其中instanceof是子-->父
isAssignableFrom是父-->子
我们应该尽量少用instanceof 运算符
应该尽量用多态来替代它
- public interface Accounts {
- }
- public class WaterAccounts implements Accounts {
- }
- public class ElectricityAccounts implements Accounts {
- }
- //客户端
- public class test {
- public static void main(String[] args) {
- Accounts accsWater = new WaterAccounts();
- Accounts accsElectricity = new ElectricityAccounts();
- acceptAcounts(accsWater);
- }
- // 第一种使用instanceof
- public static void acceptAcounts(Accounts accs) {
- if (accs instanceof WaterAccounts) {
- System.out.println("收水费");
- } else if (accs instanceof ElectricityAccounts) {
- System.out.println("收电费");
- }
- }
- // 第二种使用多态
- public static void acceptAcounts(WaterAccounts accs) {
- System.out.println("收水费");
- }
- public static void acceptAcounts(ElectricityAccounts accs) {
- System.out.println("收电费");
- }
- }
instanceof 与isAssignableFrom的更多相关文章
- instanceof, isinstance,isAssignableFrom的区别
instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...
- instanceof isInstance isAssignableFrom 比较
instanceof : java 的关键字 判断一个 实例对象 是不是 可以赋值 给一个 class( 实例对象是不是 class 或者 subClass 的实现 ),表示的类和对象之间的关系 ...
- instanceof & isAssignableFrom的异同
instance 关注的是实例是否为类或接口的一个实例 isAssignableFrom 关注的是Class对象是否相同,或者Class1是Class2的超类或接口 Class1.isAssignab ...
- Class中isAssignableFrom() 方法
看Spring源码的时候看到这个方法: protected WebApplicationContext createWebApplicationContext(ServletContext sc) { ...
- Java 编程思想 Chapter_14 类型信息
本章内容绕不开一个名词:RTTI(Run-time Type Identification) 运行时期的类型识别 知乎上有人推断作者是从C++中引入这个概念的,反正也无所谓,理解并能串联本章知识才是最 ...
- Spring类型转换(Converter)
Spring的类型转换 以前在面试中就有被问到关于spring数据绑定方面的问题,当时对它一直只是朦朦胧胧的概念,最近稍微闲下来有时间看了一下其中数据转换相关的内容,把相应的内容做个记录. 下面先说明 ...
- ApplicationEvent事件机制源码分析
<spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...
- java变参
java变参是通过数组来实现的 Object[] addAll(Object[] array1, Object... array2)和Object[] addAll(Object[] array1, ...
- Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系
编程的时候可能会遇到一个不知道它属于哪个类的对象,我们可以用下列运算符或者方法来判断. 1.instanceof instanceof是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或 ...
随机推荐
- 一次APP测试的感悟
项目经理担责任.产品担责任.测试只需要把测试中发现的问题展示出来.如实反应问题.谁担责任谁有权利决定上不上线.所以他们直接绕过了测试.APP的上线让我学到了很多东西,见识了很多东西,也感悟了很多.这是 ...
- 【转】Description Resource Path Location Type Java compiler level&n
转载地址:http://blog.sina.com.cn/s/blog_ae96abfd0101qbq0.html 在项目上右键Properties->Project Facets,在打开的Pr ...
- [Dynamic Language] 用Sphinx自动生成python代码注释文档
用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...
- Xcode 提高效率的几个快捷键
1.一次性修改一个scope里的变量名: 点击该变量,出现下划虚线,然后command+control+E激活所有相同变量,然后进行修改. 2.删除一个词:option+delete 删除一句话:co ...
- OpenWrt > ADSL单线多拨,负载均衡(仅供参考)
前题 硬件:路由器,刷入OpenWrt 一些背景知识和动手能力 目标效果图 步骤 使用SSH 登陆路由器.I.e. ssh root@192.168.2.1 运行/usr/bin/duobo.日志类似 ...
- eclipse 用links 安装插件
eclipse 用links 安装插件: 1.在eclipse目录下新建文件夹links 2.在links里新建文件 "控件名".link controlName.link 3.在 ...
- 微信小程序-上传下载
wx.uploadFile(OBJECT) 上传 将本地资源上传到开发者服务器.如页面通过 wx.chooseImage(图片)/wx.chooseVideo(视频) 等接口获取到一个本地资源的临时文 ...
- python 生成器生成杨辉三角
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- 点餐系统Sprint1总结
经过第一个阶段的冲刺,大家基本上都熟悉自己要做什么,并且把界面做了出来.通过这个阶段的冲刺,大家都学到了很多东西,团队更加默契,遇到不懂的都会提出来一起解决. 团队贡献分 148彭宏亮 20 150张 ...
- Maven安装与使用
1.安装Maven 1)官网下载Maven : http://maven.apache.org/download.cgi,解压下载文件 2)配置环境变量 3)验证是否已经安装成功:打开cmd,输入mv ...