如果用Java的伪代码来表现Java语言规范所描述的运行时语义,会是这样:
用中文说就是:如果有表达式 obj instanceof T ,那么如果 obj 不为 null 并且 (T) obj 不抛 ClassCastException 异常则该表达式值为 true ,否则值为 false 。
注意这里完全没提到JVM啊Class对象啊啥的,没有展现出如何从代码的角度获得T是一个什么类型。另外要注意 instanceof 运算符除了运行时语义外还有部分编译时限制,详细参考规范。
// obj instanceof T boolean result; if (obj == null) { result = false; } else { try { T temp = (T) obj; // checkcast result = true; } catch (ClassCastException e) { result = false; } }
注意这里完全没提到JVM啊Class对象啊啥的,没有展现出如何从代码的角度获得T是一个什么类型。另外要注意 instanceof 运算符除了运行时语义外还有部分编译时限制,详细参考规范。
详细部分可参见:
作者:RednaxelaFX
链接:https://www.zhihu.com/question/21574535/answer/18998914