Kotlin kotlinClass.class.getName()不能返回包名,只能返回简单的类名

时间:2017-06-14 03:58:35

标签: java android kotlin

AClass.class.getName();

如果AClass是java类,则此方法将返回包名和类名。 但是当我将AClass java文件转换为Kotlin文件时,它只会返回一个类名。所以系统找不到这个类路径

上面的代码

5 个答案:

答案 0 :(得分:19)

有很多方法可以在kotlin中获取java Class的完全限定名称:

通过财产KClass.qualifiedName获取姓名:

val name = AClass::class.qualifiedName;

通过媒体资源Class.name获取姓名:

val name = AClass::class.java.name;

OR 通过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   |
|-----------------------|-----------------------|-----------------------|

答案 1 :(得分:4)

尝试以下解决方案:: -

var name = MainActivity::class.java.canonicalName as String

答案 2 :(得分:2)

如果是java片段

var fragmentSimpleName = FragmentName :: class.java.simpleName as String

答案 3 :(得分:1)

这就是我用来获取类名的方法。

    val TAG = javaClass.simpleName

对于Android开发人员来说,将其声明为字段并调用以打印日志非常有用。

答案 4 :(得分:0)

也许我参加聚会有点晚了,但是我使用片段的新实例的哈希码来做到这一点。它是一个Int,因此可以进行各种测试。

 private val areaFragment by lazy { Area_Fragment.newInstance() }

    var fragmentHashCode = fragment.hashCode()
            when (fragmentHashCode) {
                areaFragment.hashCode() -> {
                    myNavigationView.setCheckedItem(R.id.nav_area)
            }