kotlin反射获取实例

记录下如何使用kotlin反射获取实例。

随笔一下:本人还没入门kotlin,但是无奈客户提供一个sdk是kotlin写的,需要做sdk内部的实现。这些都可以用java代替,但是客户用到了koin,这个好像只能用kotlin写,看了koin的代码, 不是很懂用java怎么new一个single对象,如果知道的,可以交流一下。

但是用kotlin是真的很方便啊,直接 single<ClassName> { obj }就好了,太方便了。

扯远了,这里补充一下我需要反射这个类,获取到相关module的方法

刚开始发现kotlin编译出来也是class文件,我想当然的以为就像java那样反射就可以了。

 public List<Module> getPlatformModules() {
        try {
            Class<?> clazz = Class.forName(IMPL);
            return ((PlatformModules) clazz.newInstance()).getPlatformModules();
        } catch (Exception var1) {
            Log.w("getPlatformModules", "PlatformModules not found");
            return null;
        }
    }

没想到空指针了。

原来kotlin文件在编译之后,不是class,是KClass文件。

我没有找到用java反射kotlin的方式。

所有就新建了一个kotlin文件做了。

还是这段代码,使用kotlin方式反射 这样就可以啦。

private fun getPlatformModules(): List<Module> {
        val clazz = Class.forName(IMPL).kotlin
        val obj: PlatformModules = clazz.objectInstance as PlatformModules
        return obj.getPlatformModules()
    }

ps:kotlin反射需要依赖反射的包

需要在app的module的build.gradle 中添加依赖

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.4.32"
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容