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();
}
}
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();
}
}
相关文章推荐
- Java面向对象一点小基础总结
- JAVA基础知识点(自己总结的)
- java中wait()方法的一点总结
- java中的instanceof关键字总结
- Java 多态的一点总结
- java基础总结(以自己实际情况做的总结)
- java的输入语句小结(自己总结)
- 自己对java里面的socket的一点理解
- java中对于多态的理解(自己总结版)
- java中面向对象的一点学习总结
- java基础-自己老混淆不清的问题,总结下来经常看看
- 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74
- [原]关于Java中字符编码的一点总结
- 发2年前自己LFS时总结的一点东西
- java_instanceof运算符的总结
- Linux~Sh脚本一点自己的总结
- 黑马程序员-自己总结的java学习笔记(8)网络编程
- Java培训笔记十一(自己总结的Java语法基础)
- EventBus 3.0使用步骤(一):(每天学一点,总结一下适合自己的)
- 关于java.io的一点总结