说明:
本系列博客是本人在工作中遇到的一些问题的整理,其中有些资料来源网络博客,有些信息来自出版的书籍,掺杂一些个人的猜想及验证,总结,主要目的是方便知识的查看,并非纯原创。本系列博客会不断更新。原创不容易,支持原创。对于参考的一些其他博客,会尽量把博客地址列在博客的后面,以方便知识的查看。
Class类的isInstance(Object obj)作用与instanceof关键字一样,只不过使用instanceof关键字时,关键字左侧是被检测对象,右侧是类型,isInstance方法的参数是被检测对象
类层次还是一样,使用A、B、C、D,其定义参看上一篇博客。看下如下测试类:
/**
* Created with IntelliJ IDEA.
* User: yejunwu123@gmail.com
* Date: 2014-08-17 20:56
* Description:测试java中Object.class.isInstance()方法
*/
public class IsInstanceTest {
public static void main(String[] args) {
//创建对象
A ab = new B();
A ac = new C();
B bb = new B();
B bc = new C();
C cc = new C();
D dd = new D();
//A.class.isInstance(..)
System.out.println("A.class.isInstance(ab) = " + (A.class.isInstance(ab)));
System.out.println("A.class.isInstance(ac) = " + (A.class.isInstance(ac)));
System.out.println("A.class.isInstance(bb) = " + (A.class.isInstance(bb)));
System.out.println("A.class.isInstance(bc) = " + (A.class.isInstance(bc)));
System.out.println("A.class.isInstance(cc) = " + (A.class.isInstance(cc)));
System.out.println("A.class.isInstance(dd) = " + (A.class.isInstance(dd)));
System.out.println("A.class.isInstance(null) = " + (A.class.isInstance(null)));
System.out.println("-------------------------------------");
//B.class.isInstance(..)
System.out.println("B.class.isInstance(ab) = " + (B.class.isInstance(ab)));
System.out.println("B.class.isInstance(ac) = " + (B.class.isInstance(ac)));
System.out.println("B.class.isInstance(bb) = " + (B.class.isInstance(bb)));
System.out.println("B.class.isInstance(bc) = " + (B.class.isInstance(bc)));
System.out.println("B.class.isInstance(cc) = " + (B.class.isInstance(cc)));
System.out.println("B.class.isInstance(dd) = " + (B.class.isInstance(dd)));
System.out.println("B.class.isInstance(null) = " + (B.class.isInstance(null)));
System.out.println("-------------------------------------");
//C.class.isInstance(..)
System.out.println("C.class.isInstance(ab) = " + (C.class.isInstance(ab)));
System.out.println("C.class.isInstance(ac) = " + (C.class.isInstance(ac)));
System.out.println("C.class.isInstance(bb) = " + (C.class.isInstance(bb)));
System.out.println("C.class.isInstance(bc) = " + (C.class.isInstance(bc)));
System.out.println("C.class.isInstance(cc) = " + (C.class.isInstance(cc)));
System.out.println("C.class.isInstance(dd) = " + (C.class.isInstance(dd)));
System.out.println("C.class.isInstance(null) = " + (C.class.isInstance(null)));
System.out.println("-------------------------------------");
//D.class.isInstance(..)
System.out.println("D.class.isInstance(ab) = " + (D.class.isInstance(ab)));
System.out.println("D.class.isInstance(ac) = " + (D.class.isInstance(ac)));
System.out.println("D.class.isInstance(bb) = " + (D.class.isInstance(bb)));
System.out.println("D.class.isInstance(bc) = " + (D.class.isInstance(bc)));
System.out.println("D.class.isInstance(cc) = " + (D.class.isInstance(cc)));
System.out.println("D.class.isInstance(dd) = " + (D.class.isInstance(dd)));
System.out.println("D.class.isInstance(null) = " + (D.class.isInstance(null)));
}
}
可以看出,即使类D与A、B、C不属于同一个继承层次,编译也会通过,与instanceof不同。
以下是控制台运行结果:
A.class.isInstance(ab) = true
A.class.isInstance(ac) = true
A.class.isInstance(bb) = true
A.class.isInstance(bc) = true
A.class.isInstance(cc) = true
A.class.isInstance(dd) = false
A.class.isInstance(null) = false
-------------------------------------
B.class.isInstance(ab) = true
B.class.isInstance(ac) = true
B.class.isInstance(bb) = true
B.class.isInstance(bc) = true
B.class.isInstance(cc) = true
B.class.isInstance(dd) = false
B.class.isInstance(null) = false
-------------------------------------
C.class.isInstance(ab) = false
C.class.isInstance(ac) = true
C.class.isInstance(bb) = false
C.class.isInstance(bc) = true
C.class.isInstance(cc) = true
C.class.isInstance(dd) = false
C.class.isInstance(null) = false
-------------------------------------
D.class.isInstance(ab) = false
D.class.isInstance(ac) = false
D.class.isInstance(bb) = false
D.class.isInstance(bc) = false
D.class.isInstance(cc) = false
D.class.isInstance(dd) = true
D.class.isInstance(null) = false
不难看出Class类的isInstance(Object obj)作用与instanceof关键字一样。
相关推荐
### Python `issubclass` 和 `isinstance` 函数详解 在Python编程中,`issubclass` 和 `isinstance` 是两个非常重要的内置函数,它们可以帮助我们更好地理解和操作类和对象之间的关系。这两个函数虽然功能相似,但...
在Java编程语言中,`instanceof` 和 `Class.isInstance()` 都是用来判断对象是否属于特定类型的工具,但它们之间存在一些微妙的区别。下面将详细解释这两种操作符的用法和差异。 首先,`instanceof` 关键字是Java...
0397_极智开发_解读python isinstance()用法
在Python编程语言中,assert语句和isinstance函数是常用的调试和类型检查工具,它们在编写代码时发挥着重要作用。 首先我们来详细讨论assert语句的用法。Assert语句是一种编程中常用的方式,用于在代码中设置断点,...
一、isinstance() 在Python中可以使用type()与isinstance()这两个函数判断对象类型,而isinstance()函数的使用上比type更加方便。 复制代码 代码如下: # coding=utf-8 a = 10 def b(): pass print ...
isinstance(object, classinfo) 判断实例是否是这个类或者object object是变量 classinfo 是类型(tuple,dict,int,float) 判断变量是否是这个类型 复制代码 代码如下: class objA: pass A = objA() ...
有两个主要的内置函数用于此目的:`type()` 和 `isinstance()`。它们虽然都能用来检查变量的数据类型,但它们的行为和应用场景有所不同。 `type()` 函数是Python中最直接的数据类型检查工具。它返回一个对象的类型...
复制代码 代码如下:if (typeof(objA) == typeof(String)) { //TODO } 在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如下面的例子: 复制代码 代码如下:class objA: pass A = objA() B = ‘a’,’...
`isinstance()`是Python内置的一个类型检查函数,它允许我们检查一个对象是否属于特定的类型或者类的继承链。在Python编程中,了解并正确使用`isinstance()`可以帮助我们编写更加健壮和安全的代码,特别是在处理用户...
isinstance()函数是Python中的一个内置函数,用于检查一个对象是否是一个类的实例。它支持类和实例的继承关系判断,同时也支持通过重载来改变判断逻辑。然而,在实际使用中,开发者可能会遇到一些关于如何正确重载...
本文将深入解析Python中用于获取对象信息的三个核心函数:`type()`、`isinstance()` 和 `dir()`。 首先,`type()` 函数用于确定对象的类型。通过调用 `type()` 并传入一个变量,你可以获取到该变量所指向的对象的...
python基础教程,ipynb格式,一个文件一个知识点。
flat_list = [item for sublist in nested_list for item in (sublist if isinstance(sublist, list) else [sublist])] ``` 这种方式可以有效处理任意深度的嵌套。 **1.13 Looping in Parallel over Index and ...
4.6.4 type()和isinstance() 4.6.5 python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的...