Kotlin kotlinClass.class.getName() не может вернуть имя пакета, но только простое имя класса

AClass.class.getName();

если AClass - это класс java, этот метод возвращает имя пакета и имя класса. но когда я конвертирую файл Java в файл Kotlin, он возвращает только имя класса. поэтому система не может найти этот путь класса

код выше

Ответы

Ответ 1

Есть много способов, чтобы получить полное квалифицированное имя 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   |
|-----------------------|-----------------------|-----------------------|

Ответ 2

Попробуйте ниже решение :: -

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

Ответ 3

Если это фрагмент java

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

Ответ 4

Это то, что я использую, чтобы получить имя класса.

    val TAG = javaClass.simpleName

Для разработчиков Android очень полезно объявить в качестве поля и вызвать для печати журналов.

Ответ 5

Возможно, я немного опоздал на вечеринку, но я делаю это с использованием хеш-кода нового экземпляра фрагмента. Это Int, поэтому позволяет проводить все виды тестов.

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

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