赞
踩
前言
基于 Android Studio 提供的便捷工具,开发者可以很方便的把写好的 Java 代码 Convert Java File to Kotlin File,可好奇的小猫们反向思维应该会有这样的困惑:如何 Convert Kotlin File to Java File ?
这边将提供一种方式可以把 Kotlin 代码反编译成 Java 代码
管理的某项目因需求需要,集成了某第三方 SDK
,SDK
提供的 Demo
是基于 Java
语言编写的,然后被需求实现的 owner 使用了 Kotlin
语言进行了集成。功能验收时出现如下异常:
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.f, parameter s
at xxx.xxx.xxx.xxx.xxx.xxx.xxxAdCSJHelper$loadTTNativeVideoAD$1$onRewardVideoAdLoad$2.onInstalled(xxxAdCSJHelper.java)
at com.bytedance.sdk.openadsdk.downloadnew.core.c.onInstalled(c.java:107)
at com.bytedance.sdk.openadsdk.downloadnew.a.b$1.b(b.java:221)
at com.ss.android.downloadlib.a.f$1.run(f.java:423)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6196)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
在实现的 Kotlin
方法中,参数是被规范不允许为 null
,但是实际上出现了参数为 null
的情况,导致了异常崩溃
在方法的参数定义进行判空处理,即加上 ?
:即 s: String
改写成 s: String?
把当前的kt代码
转成字节码
,在把对应的字节码内容反编译成java代码
进行比对
上两张截图中可以定位到关于异常栈中的信息打印由来,并且可以学习到Kotlin代码在build成java代码的对应差异,所以上图中可以看到确实是因为参数出现null
了才引起崩溃的,那么解决方案就是在kt
中的参数定义加上?
,在根据下面两张截图进行源码对比就能发现问题了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。