instanceof 与isAssignableFrom

Posted 李慕白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了instanceof 与isAssignableFrom相关的知识,希望对你有一定的参考价值。

instanceof 针对实例 
isAssignableFrom针对class对象

 

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

Java代码  技术分享
  1. Class1.isAssignableFrom(Class2)     

 

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

Java代码  技术分享
  1. oo   instanceof   TypeName       

     第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

 

Java代码  技术分享
  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         List<String> list = new ArrayList<String>();  
  4.         System.out.println(list instanceof List);  
  5.         System.out.println(list instanceof ArrayList);  
  6.           
  7. /*      System.out.println(list.getClass()); 
  8.         System.out.println(List.class); 
  9.         System.out.println(ArrayList.class);*/  
  10.           
  11.         System.out.println(list.getClass().isAssignableFrom(List.class));  
  12.         System.out.println(List.class.isAssignableFrom(list.getClass()));  
  13.     }  
  14. }  

 

结果:

true
true
false
true

其中instanceof是子-->父 
isAssignableFrom是父-->子

 

 

我们应该尽量少用instanceof 运算符

应该尽量用多态来替代它

 

Java代码  技术分享
  1. public interface Accounts {     
  2.   
  3. }  
  4.   
  5. public class WaterAccounts implements Accounts {  
  6.       
  7. }  
  8.   
  9. public class ElectricityAccounts implements Accounts {   
  10.       
  11. }  

 

Java代码  技术分享
    1. //客户端    
    2. public class test {  
    3.   
    4.     public static void main(String[] args) {  
    5.   
    6.         Accounts accsWater = new WaterAccounts();  
    7.         Accounts accsElectricity = new ElectricityAccounts();  
    8.   
    9.         acceptAcounts(accsWater);  
    10.   
    11.     }  
    12.   
    13.     // 第一种使用instanceof  
    14.     public static void acceptAcounts(Accounts accs) {  
    15.   
    16.         if (accs instanceof WaterAccounts) {  
    17.   
    18.             System.out.println("收水费");  
    19.   
    20.         } else if (accs instanceof ElectricityAccounts) {  
    21.   
    22.             System.out.println("收电费");  
    23.         }  
    24.   
    25.     }  
    26.   
    27.     // 第二种使用多态  
    28.     public static void acceptAcounts(WaterAccounts accs) {  
    29.   
    30.         System.out.println("收水费");  
    31.   
    32.     }  
    33.   
    34.     public static void acceptAcounts(ElectricityAccounts accs) {  
    35.   
    36.         System.out.println("收电费");  
    37.   
    38.     }  
    39.   
    40. }  









以上是关于instanceof 与isAssignableFrom的主要内容,如果未能解决你的问题,请参考以下文章

java中isAssignableFrom()方法与instanceof关键字的区别

Js 中 typeof 与 instanceof 的区别

关于JavaScript中的typeof与instanceof

instanceof与class的等价性

instanceof 与isAssignableFrom

javascript教程50:认识instanceof 与 原型链