type
status
date
slug
summary
tags
category
icon
password
Property
获取到某个
Class
对象时,实际上就获取到了一个类的类型:还可以用实例的
getClass()
方法获取:最后一种获取
Class
的方法是通过Class.forName("")
,传入Class
的完整类名获取:这三种方式获取的
Class
实例都是同一个实例,因为JVM对每个加载的Class
只创建一个Class
实例来表示它的类型。获取父类的Class
有了
Class
实例,还可以获取它的父类的Class
:Integer
的父类类型是Number
,Number
的父类是Object
,Object
的父类是null
。除Object
外,其他任何非interface
的Class
都必定存在一个父类类型。获取interface
由于一个类可能实现一个或多个接口,通过
Class
可以查询到实现的接口类型。例如,查询Integer
实现的接口:运行上述代码可知,
Integer
实现的接口有:- java.lang.Comparable
- java.lang.constant.Constable
- java.lang.constant.ConstantDesc
要特别注意:
getInterfaces()
只返回当前类直接实现的接口类型,并不包括其父类实现的接口类型:Integer
的父类是Number
,Number
实现的接口是java.io.Serializable
。此外,对所有
interface
的Class
调用getSuperclass()
返回的是null
,获取接口的父接口要用getInterfaces()
:如果一个类没有实现任何
interface
,那么getInterfaces()
返回空数组。继承关系
当判断一个实例是否是某个类型时,正常情况下,使用
instanceof
操作符:如果是两个
Class
实例,要判断一个向上转型是否成立,可以调用isAssignableFrom()
: