有人说instanceof这个java关键字没必要存在了,不过本人在实际项目中真正的应用过;
instanceof是java的二元操作符,是判断关键字左边对象是否是右边类的实例,然后返回一个布尔类型的结果;先看如下例子:
public static void main(String[] args) {
Integer value = 0;
if(value instanceof Object){
System.out.println("Integer is
Object!");
}else{
System.out.println("Integer is not
Object!");
}
}
看这段代码,如果还不了解instanceof这个关键字也能猜出应该打印出“Integer is
Object!”;那instanceof是如何判断的呢;
现在思考一下多态的概念,一个事物或实例有多种形态,显然一个Integer的实例同时也可以成为它是Object类型的,所以value是Object没错;那我们再来看看接口是不是也一样可以这样用呢:
public static void main(String[] args) {
List list = new ArrayList();
if(list instanceof
java.util.Collection){
System.out.println("List is
Collection!");
}else{
System.out.println("List is not Collection!");
}
}
现在定义了一个List接口对象,应用向上转型指向的ArrayList的实例;然后看list是否是java.util.Collection呢,我们知道Collection是线性集合的父接口,所以结果应该是“List is Collection!”;
综上,无论类还是接口都可以用instanceof这个关键字来判断,其实是不是也可以把这个关键字理解为多态的一个应用呢?