在强制转型中,为了避免出现ClassCastException,可以通过instanceof关键字判断某个引用指向的对象是否为指定类型。看如下代码所示:
- 学校学生 e = new 学校校长();
- System.out.println(e instanceof 学校老师); // true
- System.out.println(e instanceof 学校保安); // true
- System.out.println(e instanceof 饭店阿姨); // false
- 学校主任 pm = null;
- if (e instanceof 学校主任) {
- pm = (学校主任) e;
- }
分析如上代码,可以看出,因为e指向的为校长,所以判断e是否是老师类,返回结果为true,而老师类又实现了学校保安接口,所以判断emp1是否为学校保安,返回结果也为true。当想将e转换为主任时,先通过instanceof关键字判断,而后再转型。这样则可以避免发生ClassCastException,因为只要instanceof为true,则强制转换一定成功。