kotlin获取class类型

如何或取

对于一个kotlin类 A,我们想获取它的class类型,使用A::class.java 或 A.javaClass,原理是

// A::class.java
public val <T> KClass<T>.java: Class<T>
    @JvmName("getJavaClass")
    get() = (this as ClassBasedDeclarationContainer).jClass as Class<T>

// A.javaClass
/**
 * Returns the runtime Java class of this object.
 */
public inline val <T : Any> T.javaClass: Class<T>
    @Suppress("UsePropertyAccessSyntax")
    get() = (this as java.lang.Object).getClass() as Class<T>

两者的区别在于,如果A 内部定义了Companion Object,则A::class.java 为java的 A.class, A.jvaClass 为 java的 Companion.class 。如果A内部没有Companion的定义,则都为java的A.class。

基本数据类型的class类型如何获取

val a = Float::class.java
val b = java.lang.Float.TYPE
val c = Float::class.javaPrimitiveType

val d = Float::class.javaObjectType
val e = java.lang.Float::class.java
val f = Class.forName("java.lang.Float")


val g = Float.javaClass

Log.e("test", "a=$a b=$b c=$c d=$d e=$e f=$f g=$g")

转成java

Class a = Float.TYPE; //Float::class.java
Class b = Float.TYPE; // java.lang.Float.TYPE
Class c = Float.TYPE; // Float::class.javaPrimitiveType

Class d = Float.class; // Float::class.javaObjectType
Class e = Float.class; // java.lang.Float::class.java
Class var10000 = Class.forName("java.lang.Float");
Intrinsics.checkExpressionValueIsNotNull(var10000, "Class.forName(\"java.lang.Float\")");
Class f = var10000; // Class.forName("java.lang.Float")

Class g = FloatCompanionObject.INSTANCE.getClass(); // Float.javaClass

Log.e("test", "a=" + a + " b=" + b + " c=" + c + " d=" + d + " e=" + e + " f=" + f + " g=" + g);

其中Float.TYPE为

public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");

打印结果为

test: 
a=float b=float c=float 
d=class java.lang.Float e=class java.lang.Float f=class java.lang.Float 
g=class kotlin.jvm.internal.FloatCompanionObject

kotlin中 Float::class.java 并不等于 java中的 Float.class

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值