如何在Kotlin中将字符串转换为类类型?

时间:2018-09-17 06:23:28

标签: android kotlin kotlin-android-extensions

我想将此字符串转换为AppDatabase类型,我尝试过此Class.forName(),但这不能正常工作。

val str = "com.crypto.wallet.data.AppDatabase_Impl@14731a42"

我的课程路径是“ com.crypto.wallet.data.AppDatabase

我是Kotlin环境的新手,请引导我。

脚注:

  

我需要将值传递给Main.kt到activityTwo.kt,所以在这里我使用ShardPref来处理数据。上面的值不是String类型,因此我需要将其转换为字符串值并传递给ActivityTwo.kt类。重要提示:ActivityTwo.kt文件只有一种方法,它将支持args类型为ClassA,ClassB和ClassC,例如MyFunctionSample(ClassA,ClassB,ClassC),但是我在String Type中有一个值,因此我需要将类型转换为String转换为ClassA类型。这是我的打击。

2 个答案:

答案 0 :(得分:0)

您可以使用此:

val classType = Class.forName("packageName.class")

就您而言

val classType = Class.forName("com.crypto.wallet.data.AppDatabase_Impl")

答案 1 :(得分:0)

val str = "com.crypto.wallet.data.AppDatabase_Impl@14731a42"

对于我对Java的普遍理解(是,Java,不是Kotlin),这意味着:

  • 有一个接口或抽象类com.crypto.wallet.data.AppDatabase
  • 有一个非静态的非抽象类com.crypto.wallet.data.AppDatabase_Impl,其中implements com.crypto.wallet.data.AppDatabase
  • 有一个com.crypto.wallet.data.AppDatabase_Impl实例,它用一个“哈希码” 14731a42(这个哈希码在大多数时间是没有意义的)调用了某事。
  • 此接口或此实现都没有@Override的{​​{1}}调用。
  • 在此“事物”对象上被称为toString()时,发生就是toString()

这导致原始问题中提到的"com.crypto.wallet.data.AppDatabase_Impl@14731a42"

此实例中可能有一些重要的内容,但是如果直接致电val str,则会丢失

要实现目标,您最好为“ AppDatabase”数据结构实现一个序列化器和反序列化器,一种简单的方法是使用JSON。