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

问题描述 投票:0回答:2

我想将此字符串转换为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类型。我来袭了。

android kotlin kotlin-android-extensions
2个回答
0
投票

你可以用这个:

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

在你的情况下

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

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

为了我对Java的共同理解(是的,Java,而不是Kotlin),这意味着:

  • 有一个接口或抽象类com.crypto.wallet.data.AppDatabase
  • 有一个非静态的非抽象类com.crypto.wallet.data.AppDatabase_Implimplements com.crypto.wallet.data.AppDatabase
  • 有一个com.crypto.wallet.data.AppDatabase_Impl的实例用一个“hashcode”14731a42调用了一些东西(这个哈希码在大多数时候都没有意义)。
  • 这个接口和这个实现都没有@Override toString()调用。
  • 当在这个“东西”对象上调用toString()时,恰好是"com.crypto.wallet.data.AppDatabase_Impl@14731a42"

这导致原始问题中提到的val str

在这个实例中可能有一些重要的内容,但是如果你直接调用toString()它就会丢失。

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

© www.soinside.com 2019 - 2024. All rights reserved.