J'ai un projet qui est écrit avec les langues Java et Kotlin et récemment, j'ai rencontré le prochain numéro.
Disons que nous avons puis à Kotlin lorsque nous imprimons le nom du mois: p> myMonth code> Enum: p> fun main() {
val month = MyMonth.JAN
println(month.name)
}
3 Réponses :
Votre API Java a Si vous voulez y accéder, ajoutez E.G. Ce qui suit à l'API Java: p> ... puis l'accédez à partir de kotlin comme p> Nom code> comme champ privé em>. Rien ne peut y accéder, pas en Java ni Kotlin.
En Java, je peux simplement ajouter un getter et appeler myminth.jan.getname () code> qui me retournerait ce dont j'ai besoin. Mais ce getter n'est pas utilisé à Kotlin, même si l'idée me montre que c'est à partir de là, je vais mettre à jour ma question pour le rendre plus clair.
Hey @slaw C'est une bonne suggestion, malheureusement, il n'est pas possible de renommer ce domaine car je ne suis pas le propriétaire de la bibliothèque qui a cette énumération. De plus, je pense que ce n'est pas si rare lorsque vous avez un Java Enum qui a champ Nom code>.
nom code> est spécifiquement compliqué en étant déjà cuit dans la définition pour Enums. Vous devrez peut-être juste appeler GetName () explicitement et ne pas l'utiliser comme une propriété, même si Intellij vous dit que vous n'êtes pas obligé. Cela peut être pivotant couché.
Oui, je comprends que nom code> est cuit à Kotlin Enum, vient de remarquer ce comportement étrange et était confus pendant un moment. Merci!
Vous pouvez appeler le getter directement au lieu d'utiliser la syntaxe de la propriété:
@Orest c'est parce que nom B> est réservé à Enums. Si vous pouviez choisir un autre nom de propriété, alors ce serait non excessive
@OREST Vous pouvez faire une vulgarisation qui appelle GetName () pour que cela ait l'air plus idiomatique
@Nikolaisishevchenko Oui, il est clair pour moi, mais j'ai déjà mentionné que dans les commentaires que ce n'est pas si rare lorsque vous devez utiliser un énumé qui vient de Java avec nom code> et que vous n'êtes pas en mesure de changes le
Enum est maintenant faible utilisation. Vous pouvez utiliser Intdef au lieu d'ENUMS.
@IntDef(MyMonth.JAN, MyMonth.FEB)
@Retention(AnnotationRetention.SOURCE)
annotation class MyMonth {
companion object {
const val JAN = 0
const val FEB = 1
fun getDisplayString(toDoFilterTypes: Int): String {
return when (toDoFilterTypes) {
JAN -> "All"
FEB -> "Job"
else -> "N/A"
}
}
}
}
Ne devriez-vous pas appeler
myminth.jan.name code> à la place?Je suppose que kotlin Enums a déjà un nom code> nom code>, comme vu ici , il y a un conflit entre la propriété Java Getter et la propriété de Kotlin. Si possible, je vous recommande de changer le nom du champ Java et de getter à autre chose que
nom code> etgetName () code>. Personnellement, je pense que c'est une mauvaise idée d'avoir un champ nomméNom code> dans une Java Enum de toute façon, compte tenu de l'existence de la méthodeName () Code>. Si vous ne pouvez pas le changer, et si vous appelezgetname () code> explicitement dans le code de kotlin?