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


参考:http://blog.csdn.net/kjfcpua/article/details/7045207

    http://www.yiibai.com/java/lang/class_isassignablefrom.html

   http://www.iteye.com/problems/32021

猜你喜欢

转载自rd-030.iteye.com/blog/2319276
今日推荐