日期:2014-05-20 浏览次数:21047 次
public class InstanceOfDemo {
public static void main(String[] args) {
System.out.println(new InstanceOfDemo() instanceof String); //compile time error
System.out.println(new InstanceOfDemo() instanceof Exception); //compile time error
System.out.println(new InstanceOfDemo() instanceof Object); //compilation and output true
System.out.println(new InstanceOfDemo() instanceof List); //compilation and output false
}
}
class Point { int x, y; }
class Element { int atomicNumber; }
class Test {
public static void main(String[] args) {
Point p = new Point();
Element e = new Element();
if (e instanceof Point) { // compile-time error
System.out.println("I get your point!");
p = (Point)e; // compile-time error
}
}
}
------解决方案--------------------
理解instanceof关键还是需要注意一下泛型。
对于一般的情形,比如
可以看一下这个例子:
import java.util.List;
public class Test {
public static void main(String[] args) {
//编译时无法确定getObject()返回的引用类型的具体类型,下面两句都能通过编译
System.out.println(getObject() instanceof Object);
System.out.println(getObject() instanceof String);
//编译时可以确定类型的,能够cast则编译通过,否则编译失败
Test test = new Test();
System.out.println(test instanceof Test);//ok
System.out.println(test instanceof Object); //ok
//System.out.println(test instanceof String);//error! test is not a String
//跟泛型相关的注意一下
//List是泛型类型,如果不指定泛型参数,成功编译
System.out.println(test instanceof List);
//如果不限定类型界限,通过编译
System.out.println(test instanceof List<?>);
//指定泛型参数,编译时可确定类型,如果不能cast,编译不通过
//System.out.println(test instanceof List<Test>); //error!
}
public static Object getObject() {
return "Test";
}
}