zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    flask的简单使用
    Android Studio 使用Lambda表达式
    安卓SDK更新 国内镜像站点记录
    REACT-NATIVE入门(环境搭建及HELLOWORLD)
    深入理解Android 读感(一)
    JNI初入手
    (转)c++ 中的using namespace std是什么意思,什么时候用
    (转)const char to LPCTSTR不能转化问题
    Git常用操作之add操作
    Git日志操作
  • 原文地址:https://www.cnblogs.com/lxl57610/p/6083060.html
Copyright © 2011-2022 走看看