J'ai une classe Java du format:Kotlin: Définition d'un booléen privé en classe Java via une classe Data dans Kotlin. Pourquoi je ne suis pas capable de faire ça?
class JavaClass {
private String name;
private Boolean x;
public String getName() { return name; }
public void setName(String name) { this.name = name }
public Boolean isX() { return x; }
public void setX(Boolean x) { this.x = x }
}
Et je redéfinissant cette classe dans une classe de données dans Kotlin, ce qui est du format:
data class KotlinClass(
var nameNew: String? = null,
var xNew: Boolean = false
): JavaClass() {
init {
name = nameNew
x = xNew
}
}
Quand je fais cela, la l'initialisation du nom de cette façon ne pose pas de problème, mais je ne peux pas initialiser x de cette manière. L'IDE se plaint que x est invisible. Pourquoi avec x et pas avec le nom?
J'ai créé une nouvelle variable dans la classe Kotlin avec le nom x avec un accesseur et un accesseur personnalisés et elle se plaint d'un remplacement accidentel pour le setter (c'est compréhensible.). Cela signifie que le setter et getter Java est visible dans la classe Data. Alors, pourquoi le setter n'est-il pas utilisé pour x dans le bloc init, comme c'est le cas pour le nom?
Merci beaucoup! Une question de suivi à ce sujet: 'var ISX: Boolean get() = ISX() set (valeur) = setX (valeur)' Vous avez dit que l'ISX sera une propriété générée. Alors, sa signature ressemblera-t-elle à quelque chose comme ça? – NSaran
@ user8138184, ceci est seulement une représentation. Il se comporte * comme si * une propriété était implémentée comme vous le pensiez, mais elle n'est pas compilée avec une propriété réelle (le compilateur de Kotlin ne fait que mapper les lectures et les écritures de cette représentation aux appels getter et setter réels). – hotkey