Как преобразовать строку в тип класса в Kotlin? - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу преобразовать эту строку в тип AppDatabase, я пробовал это Class.forName(), но это не работает должным образом.

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

мой путь к классу " com.crypto.wallet.data.AppDatabase"

Я новичок в среде Kotlin, пожалуйста, помогите мне.

Foot Note:

Iнужно передать значения в Main.kt в ActivityTwo.kt, поэтому здесь я использую ShardPref для обработки данных.Выше значения не являются строковым типом, поэтому мне нужно преобразовать это в строковые значения и передать в класс ActivityTwo.kt.Важно: у файла ActivityTwo.kt есть один метод, он будет поддерживать типы аргументов ClassA, ClassB и ClassC, например, для MyFunctionSample (ClassA, ClassB, ClassC), но у меня есть значения в String Type, поэтому мне нужно преобразовать тип в Stringк классу типа.Вот я ударил.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019
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 вызова toString().
  • При вызове toString() для этого объекта "что-то", он случается , чтобы быть "com.crypto.wallet.data.AppDatabase_Impl@14731a42"

Это приводит к val str, упомянутому в первоначальном вопросе.

Там может быть некоторое важное содержание внутри этого экземпляра, однако это отсутствует , если вы вызываете toString() напрямую.

Чтобы достичь цели, вам нужно лучше реализовать сериализатор и десериализатор для вашей структуры данных "AppDatabase", простой способ - использовать JSON.

0 голосов
/ 17 сентября 2018

Вы можете использовать это:

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

в вашем случае

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