日期:2014-05-20 浏览次数:21054 次
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";
    }
}