kotlin反射获取实例

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

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

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

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

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

 public List 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 {
        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"
}

你可能感兴趣的:(kotlin反射获取实例)