- Kotlin进阶实战
- 沈哲 易庞宙编著
- 734字
- 2025-02-20 21:22:45
7.4 Java反射和Kotlin反射(下)
7.4.1 获取类的其他信息
1.Java获取类的其他信息
Java获取类的注解信息对应的是java.lang.annotation.Annotation接口,有以下3种方式:
//获取类的annotationClass类型的注解(包括从基类继承的、从接口实现的所有public成员变量) public Annotation<A> getAnnotation(Class annotationClass)
//获取类的全部注解(包括从基类继承的、从接口实现的所有public成员变量) public Annotation[] getAnnotations()
//获取类自身声明的全部注解(包含 public、protected和private成员变量) public Annotation[] getDeclaredAnnotations()
Java获取类的接口和基类的信息,对应的是java.lang.reflect.Type接口,有以下两种方式:
//获取类实现的全部接口 public Type[] getGenericInterfaces()
//获取类的直接超类的Type public Type getGenericSuperclass()
Java获取类的其他描述信息,包括:
//获取类名 public String getSimpleName()
//获取完整类名 public String getName()
//判断类是不是枚举类 public boolean isEnum()
//判断obj是不是类的实例对象 public boolean isInstance(Object obj)
//判断类是不是接口 public boolean isInterface()
//判断类是不是局部类。局部类所属范围:在块、构造器以及方法内,这里的块包括普通块和静态块 public boolean isLocalClass()
//判断类是不是成员类 public boolean isMemberClass()
//判断类是不是基本类型 public boolean isPrimitive()
2.Kotlin获取类的其他信息
Kotlin能够获取更多的类信息,包括:
//获取类的名字 public val simpleName: String?
//获取类的全包名 public val qualifiedName: String?
//如果这个类声明为object,则返回其实例,否则返回null public val objectInstance: T?
//获取类的可见性 @SinceKotlin("1.1") public val visibility: KVisibility?
//判断类是否为final类,Kotlin默认类是final 类型的,除非这个类声明为open或者abstract @SinceKotlin("1.1") public val isFinal: Boolean
//判断类是不是open,(abstract 类也是open),表示这个类可以被继承 @SinceKotlin("1.1") public val isOpen: Boolean
//判断类是否为抽象类 @SinceKotlin("1.1") public val isAbstract: Boolean
//判断类是否为密封类 @SinceKotlin("1.1") public val isSealed: Boolean
//判断类是否为data class @SinceKotlin("1.1") public val isData: Boolean
//判断类是否为成员类 @SinceKotlin("1.1") public val isInner: Boolean
//判断类是否为companion object @SinceKotlin("1.1") public val isCompanion: Boolean
//判断类是否为functional interface @SinceKotlin("1.4") public val isFun: Boolean
//获取类中定义的其他类,包括内部类和嵌套类 public val nestedClasses: Collection<KClass<*>>
//判断一个对象是否为此类的实例 @SinceKotlin("1.1") public fun isInstance(value: Any?): Boolean
//获取这个类的泛型列表 @SinceKotlin("1.1") public val typeParameters: List<KTypeParameter>
//获取类的直接基类的列表 @SinceKotlin("1.1") public val supertypes: List<KType>
//如果该类是密封类,返回子类的列表,否则返回空列表 @SinceKotlin("1.3") public val sealedSubclasses: List<KClass<out T>>
//获取类所有的基类 val KClass<*>.allSuperclasses: Collection<KClass<*>>
//获取类的伴生对象 companionObject val KClass<*>.companionObject: KClass<*>?