我有一个简单的kotlin文件,其功能是将枚举映射到Android应用程序的Fragment Class名称。由于某种原因,返回的字符串始终为“ d”。
fun getClassNameForType(type: ContentOuterClass.Onboarding.ItemCase) : String? =
when(type) {
ContentOuterClass.Onboarding.ItemCase.EMAIL -> EmailFragment::class.simpleName
ContentOuterClass.Onboarding.ItemCase.HORIZONTAL_TWO_BUTTON -> HorizontalTwoButtonFragment::class.simpleName
ContentOuterClass.Onboarding.ItemCase.VERTICAL_TWO_BUTTON -> VerticalTwoButtonFragment::class.simpleName
ContentOuterClass.Onboarding.ItemCase.PRACTICE_SCHEDULE -> PracticeScheduleFragment::class.simpleName
ContentOuterClass.Onboarding.ItemCase.SINGLE_BUTTON -> SingleButtonFragment::class.simpleName
ContentOuterClass.Onboarding.ItemCase.SUBSCRIBE -> SubscribeFragment::class.simpleName
else -> null
}
还奇怪的是,当我对字符串进行硬编码时,该字符串会正确返回。我尝试过各种建议,以获取运气不错的Java和kotlin类的类名(例如qualifiedName
,simpleName
,::class.java.simpleName
等)。
答案 0 :(得分:1)
似乎您的班级被Proguard所混淆,这会更改您的班级名称。如果要防止混淆类名。您可以在proguard-rules.pro
文件中添加以下行:
-keepnames class your.package.name.ClassName {}