Ich versuche, meine Android-App auf Kotlin neu zu schreiben, und ich habe Gesichter Problem beim Konvertieren ContentProvider-Vertragsklasse. So habe ich einfache Vertragsklasse (Standard Sachen wie Inhaltstyp und Inhalt uris weggelassen):Kotlin für Android und statische finale innere Klassen
public final class Contract {
public static final class Contacts {
public static final String NAME = "Name"
public static final String BIRTH = "Birth"
public static final String IMAGE = "Image"
}
}
Wenn ich richtig verstehe, in Kotlin wir haben keine statischen Mitglieder. Stattdessen haben wir "Begleiter Objekte". So, nachdem es zu Kotlin Umwandlung habe ich diesen Code:
object BirthdayContract {
class Contacts : BaseColumns {
companion object {
val NAME = "Name"
val BIRTH = "Birth"
val IMAGE = "Image"
}
}
}
Aber wenn ich den Zugriff auf Felder wie Contract.Contacts.NAME ich versucht, ich habe Fehler: „NAME hat einen privaten Zugang“. Das Ändern der Sichtbarkeitsmodifikatoren hat keine Auswirkung. Gibt es also eine Möglichkeit, solche Vertragsklassen in Kotlin zu verwenden, oder besser, sie in Java zu behalten?
UPD Ich denke, dass ich klären sollte - mein Anrufer-Code ist auch in Kotlin. Das Problem war in @JvmField Annotation. Damit kann ich direkt auf statische Mitglieder zugreifen, ohne Getter aufzurufen.
Bitte geben Sie einen [MCVE] (http://stackoverflow.com/help/mcve) an. Ich habe deinen 'BirthdayContract' in eine neue Kotlin-Datei eingefügt,' 'BaseColumns' 'entfernt, da er nicht damit kompiliert wird, und eine Funktion erstellt, die' BirthdayContract.Contacts.NAME' aufruft. Ich glaube, dass Sie mehr Informationen und/oder aktualisierte Beispiele bereitstellen müssen, die das Problem, das Sie sehen, zusammenstellen und demonstrieren. Vielen Dank. – mfulton26
@ mfulton26 Ich machte das gleiche - erstellte neue .kt-Datei und kopierte meinen Kotlin-Code hinein. Es kompiliert ohne Fehler. Es gab kein Problem mit der BaseColumns-Schnittstelle. Was für einen Fehler hast du? – noktigula