• 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. }  
  • 相关阅读:
    UILocalNotification实现本地的闹钟提醒的方法
    自定义UITableViewCell:Cell高度、分割线、间距等
    第三方苹果开发库之ASIHTTPRequest(翻译版)
    字符串NSString和数组NSArray操作
    MFMailComposeViewController发送邮件的实例
    IOS开发之手势—UIGestureRecognizer 共存
    ios 画图总结 [转]
    iOS-响应上下左右滑动手势
    MFMessageComposeViewController程序内发送短信息的实例
    FIELDSYMBOLS 学习—转载
  • 原文地址:https://www.cnblogs.com/lxl57610/p/6083060.html
Copyright © 2020-2023  润新知