如果AClass是一个Java类,这个方法将会返回包名和类名。但是,当我将AClass Java文件转换成Kotlin文件时,它只会返回类名。因此系统无法找到这个类路径。
上面的代码:AClass.class.getName();
上面的代码:AClass.class.getName();
在 Kotlin 中,有多种方法可以获取 Java Class
的完全限定名:
通过 KClass.qualifiedName
属性获取名称:
val name = AClass::class.qualifiedName;
或者通过属性Class.name
获取名称:
val name = AClass::class.java.name;
或者通过Class#getName
方法获取名称:
val name = AClass::class.java.getName();
以下是一个类的限定名称的表:
|-----------------------|-----------------------|-----------------------|
| | Class | Anonymous Class |
|-----------------------|-----------------------|-----------------------|
| KClass.qualifiedName | foo.bar.AClass | null |
|-----------------------|-----------------------|-----------------------|
| Class.name | foo.bar.AClass | foo.bar.AClass$1 |
|-----------------------|-----------------------|-----------------------|
| Class.getName() | foo.bar.AClass | foo.bar.AClass$1 |
|-----------------------|-----------------------|-----------------------|
var fragmentSimpleName = FragmentName::class.java.simpleName as String
请尝试以下解决方案:-
var name = MainActivity::class.java.canonicalName as String
AClass.class.getName();
这段代码,因此我不能使用你提供的 Kotlin 语法。 - 叶钦富AClass.class.getName();
这段代码,因此我不能使用你提供的 Kotlin 语法。我需要一个完整的文件名,因为下一步将会调用 Class.forName(fragmentName)
。fragmentName 应该被 AClass 的完整名称所替代。但是现在 AClass 是一个 Kotlin 类,它会抛出 ClassNotFoundException 异常。 - 叶钦富 val TAG = javaClass.simpleName
对于Android开发者来说,将日志声明为一个字段并调用打印非常有用。
javaClass
是什么? - CoolMindcompanion object
中被用作常量,而应该像变量一样使用。在companion object
中,我们可以使用val TAG = YourClass::class.java.simpleName
。 - CoolMind private val areaFragment by lazy { Area_Fragment.newInstance() }
var fragmentHashCode = fragment.hashCode()
when (fragmentHashCode) {
areaFragment.hashCode() -> {
myNavigationView.setCheckedItem(R.id.nav_area)
}
Class.forName(fragmentName)
如果fragmentName是一个Kotlin类,它会抛出ClassNotFoundException。无论fragmentName是完整的名称还是不完整的名称,我都感到困惑。 - 叶钦富val c = Class.forName(fragmentName)?.newInstance() fragment=c as Fragment
中的fragmentName是一个完整的KClass名称,它解决了我的问题。 - 叶钦富