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是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或 ...
随机推荐
- Django进阶2
一.ORM操作进阶 ForeignKey关联 示例models from django.db import models # Create your models here. class User(m ...
- Node包管理工具
Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具: --npm --cnpm ...
- JS的兼容函数
获取类名的兼容函数 //obj.getElementsByClassName 只能在现代浏览器中使用,不能在IE8以下使用 //两个参数 classname 类名 obj 范围 function ge ...
- C#可空类型的速度和GC Alloc测试
在Unity中进行速度和GC Alloc的测试 测试脚本: using UnityEngine; using System; using System.Collections; using Syste ...
- android shortcut &livefoulder
android shortcut(实现步骤) 1.建立activity 2.minifest 里面注册并加上intent-filter,name为:android.intent.action.CREA ...
- 5.对与表与表之间的关系,efcore是如何处理的
public class Account { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Accoun ...
- maven创建子项目(适用于多模块管理项目)
在eclipse或者myeclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project ...
- color.xml
写控件的时候经常会遇到颜色选择问题,下面贴出常用颜色表示,方便选择. <?xml version="1.0" encoding="utf-8"?>& ...
- chrome的常用快捷键和命令
常见快捷键 F12 打开Chrome控制台 Ctrl+J 进入"下载内容"页面 Ctrl+H 查看"历史记录"页面 Ctrl+D 将此页加入书签 Ctrl+F ...
- IIS设置session时长
打开IIS管理器,选择要设置的session的网站,打开右边窗口的会话状态.选择状态服务器,设置连接字符串,并在服务管理开户状态服务 ASP.NET State Service