`
longzhun
  • 浏览: 360183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

instanceof 与isAssignableFrom

 
阅读更多

instanceof 针对实例
isAssignableFrom针对class对象

 

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

Java代码 复制代码 收藏代码

Class1.isAssignableFrom(Class2)   

 

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

Java代码 复制代码 收藏代码

 

oo   instanceof   TypeName     

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

 

Java代码 复制代码 收藏代码

 

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 运算符

应该尽量用多态来替代它

 

Java代码 复制代码 收藏代码

 

public interface Accounts {   

}

public class WaterAccounts implements Accounts {
	
}

public class ElectricityAccounts implements Accounts { 
	
}

 

Java代码 复制代码 收藏代码
//客户端     
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("收电费");   
  
    }   
  
}  
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics