it-swarm.com.de

Kotlin kotlinClass.class.getName () kann keinen Paketnamen, sondern nur einen einfachen Klassennamen zurückgeben

AClass.class.getName ();

wenn AClass eine Java-Klasse ist, gibt diese Methode den Paketnamen und den Klassennamen ... zurück. Wenn ich jedoch die AClass-Java-Datei in die Kotlin-Datei konvertiere, wird nur ein Klassenname zurückgegeben. Das System kann diesen Klassenpfad nicht finden

der Code oben 

7
叶钦富

es gibt viele Möglichkeiten, den vollständigen qualifizierten Namen eines Java Class in kotlin abzurufen:

name über die Eigenschaft KClass.qualifiedName erhalten:

val name = AClass::class.qualifiedName;

ODERName über die Eigenschaft Class.name erhalten:

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

ODERName über die Methode Class#getName erhalten:

val name = AClass::class.Java.getName();

die Tabelle des qualifizierten Namens einer Klasse wie folgt:

|-----------------------|-----------------------|-----------------------|
|                       |          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   |
|-----------------------|-----------------------|-----------------------|
14
holi-java

Versuchen Sie die folgende Lösung: -

var name = MainActivity::class.Java.canonicalName as String
3
Nitin Patel

Wenn es ein Java-Fragment ist

var fragmentSimpleName = FragmentName :: class.Java.simpleName als String

2
LinuxFelipe-COL

Vielleicht bin ich ein bisschen zu spät für die Party, aber ich benutze den Hashcode der neuen Instanz des Fragments. Es ist ein Int, so dass alle Arten von Tests möglich sind.

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

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

Dies ist, was ich benutze, um Klassennamen zu bekommen.

    val TAG = javaClass.simpleName

Für Android Entwickler ist es sehr nützlich, als Feld zu deklarieren und zum Drucken von Protokollen aufzurufen.

0
Kashif Anwaar