您的位置:首页 > 编程语言 > Java开发

java的instanceof自己的一点总结

2009-08-21 18:13 519 查看
A instanceof B;

A必需是具体实例,B是一种类(或接口)。

B不能是确定泛型参数的泛型。

如果A在编译时能过确定具体类型,那么a必须是可以通过(B)a转换成B类型的,不然编译器会报错。

如果A不能转换为B,则可以(Object)a instanceof B。

如果A实在运行时得到的,那么没有如此限定。

具体例子时在论坛上得到的:

package instan;

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);

System.out.println(getObject() instanceof Test);

//编译时可以确定类型的,能够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,可以通过下面方法

System.out.println((Object)test instanceof String);

//跟泛型相关的注意一下

//List是泛型类型,如果不指定泛型参数,成功编译

System.out.println(test instanceof List);

//如果不限定类型界限,通过编译

System.out.println(test instanceof List<?>);

//指定泛型参数,编译时可确定类型,如果不能cast,编译不通过

// System.out.println(getObject() instanceof List<Test>); //error

// System.out.println(test instanceof List<Test>);//error

}

public static Object getObject() {

return new Test();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: