2 votes

Pourquoi appeler un constructeur privé en Kotlin aboutit à une erreur "Impossible d'accéder à <init>" ? Qu'est-ce que <init> ?

Si vous utilisez la méthode factory en Kotlin pour créer un objet, comme:

class Person private constructor(val firstName:String , val lastName: String) {
    companion object {
        fun createPerson(firstName: String, lastName: String): Person {
            return Person(firstName, lastName)
        }
    }
}

L'appel de la méthode factory fonctionne:

val person1 = Person.createPerson("Niels", "Abel")

Et bien sûr, vous ne pouvez pas appeler le constructeur directement:

val person2 = Person("Évariste", "Galois")

L'erreur résultante est: Impossible d'accéder à '': il est privé dans 'Person'

Mais, pourquoi ont-ils choisi de signaler cette erreur particulière? Qu'est-ce que ?

4voto

Sweeper Points 1267

Est le nom du constructeur, donc le message d'erreur dit essentiellement que votre constructeur est inaccessible, exactement ce que vous attendriez.

se trouve être le nom spécial que Java utilise pour les constructeurs d'une classe. Lorsque vous compilez du code Kotlin pour la JVM, le compilateur Kotlin utilise également le même nom pour les constructeurs des classes Kotlin, afin d'être compatible avec Java. La JVM réserve même ce nom de sorte qu'il ne puisse pas être utilisé dans des méthodes régulières. (Je ne sais pas ce qu'il en est de Kotlin sur d'autres plateformes)

Le compilateur Kotlin n'est pas obligé d'afficher le nom littéralement dans le message d'erreur cependant. Ils auraient pu le remplacer par quelque chose de plus intuitif comme "constructeur", mais c'est un cas supplémentaire qu'ils devraient gérer - ils devraient spécifiquement vérifier que le nom est et le remplacer par autre chose. Autant que je puisse voir sur YouTrack, personne n'a soulevé un problème à ce sujet demandant que cela soit changé jusqu'à présent.

Voir aussi : Qu'est-ce qu'une méthode en Java ? Peut-elle être redéfinie ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X