文档章节

instanceof 与isAssignableFrom

mifans
 mifans
发布于 2017/03/29 11:56
字数 301
阅读 9
收藏 0

instanceof 针对实例 
isAssignableFrom针对class对象

 

isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。   
通常调用格式是  

Class1.isAssignableFrom(Class2)     

调用者和参数都是   Java.lang.Class   类型。   
      
  而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。   
    格式是:   

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("收电费");  
  
    }  
  
}  

 

© 著作权归作者所有

上一篇: dubbo配置参考
mifans
粉丝 11
博文 204
码字总数 103669
作品 0
海淀
程序员
私信 提问
Java 类型信息 instanceof、isInstance和isAssignabelFrom

instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。 形象地:自身实例或子类实例 instanceof 自身类...

V字仇杀
2017/10/27
23
0
instanceof, isinstance,isAssignableFrom的区别

instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。 形象地:自身实例或子类实例 instanceof 自身类...

HTCKF
2014/02/20
43
0
java中instanceOf和Class.isInstance(obj)的对比

一.常用Java类检测方法 [1] instanceOf 运算符 instanceOf是运算符只被用于对象引用变量,检查左边对象是不是右边类或接口的实例化。如果被测对象是null值,则测试结果总是false。 [2] Clas...

IamOkay
2014/10/27
3.5K
2
spring Aop 实现对http请求参数的验证,及对功能权限的验证

Aop 面向切面编程,在java 中普遍使用动态代理和反射实现。具体的请百度。spring aop有多种方式。本次使用的是注解方式,(建议使用注解方式)。 第一步自定义了2个注解 @Target(value={Ele...

巡山
2016/06/21
150
0
Json-lib 与 hibernate 共同使用的问题

hibernate使用CGLIB把POJO的domain对象动态代理,实现它的魔法,但是给JSON的序列化带来了麻烦,因为JSON无法对lazy的属性进行序列化。有以下的四个方法可以解决hibernate的序列化问题 建立J...

Zero零_度
2015/09/24
114
0

没有更多内容

加载失败,请刷新页面

加载更多

debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
28分钟前
9
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
29分钟前
7
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
33分钟前
5
0
《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP

Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理...

柯南和由美
38分钟前
4
0
流程图制作软件推荐_流程图制作软件哪个好

流程图(Flow Chart)是一种表示算法思路的图示,通过特定图形、图表可以直观的说明某一过程。这种过程既可以是生产线上的工艺流程图,也可以标明某项任务必需的管理过程。为了便于识别,绘制...

工具分享
40分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部