Publication de la couche , permettant un accès complet des applications Python aux bibliothèques de classes en Java. Grâce à JPype, il est possible d'utiliser des bibliothèques spécifiques à Java à partir de Python, créant ainsi des applications hybrides qui combinent du code Java et Python. Contrairement à Jython, l'intégration avec Java ne nécessite pas de créer une variante de Python pour la JVM, mais se fait par l'interaction entre les deux machines virtuelles, utilisant la mémoire partagée. L'approche proposée permet non seulement d'atteindre de bonnes performances, mais aussi d'accéder à toutes les bibliothèques de CPython et Java. Le code du projet sous licence Apache 2.0.
Principales modifications :
- JChar est pris en charge comme type de retour. Pour des raisons de compatibilité, JChar hérite de « str » et implémente une conversion implicite en « int ». Par conséquent, il passe les vérifications dans les contrats. Cependant, cela signifie qu'il n'est plus considéré comme un type numérique en Python et donc isinstance(c, int) renvoie False, ce qui est conforme aux règles de conversion de types Java.
- Un opérateur a été introduit pour convertir le type Java Type@obj (@ est l'opérateur Python pour le produit interne, qui n'existe pas en Java).
- Une notation pour créer des tableaux Java a été ajoutée. Type[s1][s2][s3] pour les tableaux à taille fixe, Type[:][:][:] pour les tableaux qui seront créés plus tard.
- @FunctionalInterface permet de créer des fonctions Java à partir d'objets Python avec __call__.
- Les JIterator obsolètes, l'utilisation de JException comme fabrique, get_default_jvm_path et jpype.reflect ont été supprimés.
- Par défaut, aucune conversion des chaînes Java en chaînes Python n'est effectuée.
- Python a déclaré « __int__ » comme non recommandé, donc les conversions implicites entre les types entiers et flottants produiront une TypeError.
- L'utilisation de JException a été déclarée obsolète. Pour attraper toutes les exceptions, ou vérifier qu'un objet est de type Java Exception, on doit utiliser java.lang.Throwable.
- Les causes en cascade des exceptions Java sont désormais reflétées dans les piles d'appels Python.
- L'utilisation de JString a été déclarée obsolète. Pour créer une chaîne Java, ou vérifier qu'un objet est de type chaîne Java, utilisez java.lang.String.
- Les méthodes repr des classes Java ont été mises à jour.
- java.util.List implémente les contrats pour collections.abc.Sequence et collections.abc.MutableSequence.
- java.util.Collection respecte le contrat pour collections.abc.Collection.
- Les classes Java sont désormais fermées et lanceront une TypeError lors de l'extension depuis Python.
- La gestion de Control-C est soignée. Les versions précédentes échouent lorsque Java traite le signal Control-C, car elles terminent Java pendant l'appel. Désormais, JPype générera une InterruptedException lorsqu'il retournera depuis Java. Control-C ne sera pas levé à partir de grandes procédures Java, comme c'est actuellement le cas, car Java n'a pas de moyen spécial pour cela.
Un correctif 1.0.1 a été créé, comprenant des changements pour contourner les problèmes liés à la version de Python 3.8.4. Python a modifié la logique concernant l'utilisation de « __setattr__ » pour « object » et « type », empêchant son utilisation pour modifier les classes dérivées. De plus, la vérification des erreurs a été déléguée depuis la méthode « __setattr__ », ce qui nécessite une mise à jour des types d'exceptions pour certaines vérifications de validité.
Source : opennet.ru
