Freigabe der Schicht , die vollständigen Zugriff auf die Java-Klassenbibliotheken für Python-Anwendungen ermöglicht. Mit JPype können spezifische Java-Bibliotheken aus Python verwendet werden, wodurch hybride Anwendungen geschaffen werden, die Java- und Python-Code kombinieren. Im Gegensatz zu Jython wird die Integration mit Java nicht durch die Erstellung einer Python-Variante für die JVM erreicht, sondern durch die Interaktion auf der Ebene beider virtueller Maschinen unter Verwendung von gemeinsamem Speicher. Der vorgeschlagene Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugang zu allen CPython- und Java-Bibliotheken. Der Code des Projekts unter der Apache 2.0 Lizenz.
Hauptänderungen:
- JChar wird als Rückgabetyp unterstützt. Zur Kompatibilität erbt JChar von „str“ und implementiert eine implizite Umwandlung in „int“. Daher besteht eine Überprüfung in Verträgen. Aber das bedeutet, dass es nicht mehr als numerischer Typ in Python betrachtet wird und deshalb isinstance(c, int) den Wert False annimmt, was mit den Regeln der Typumwandlung in Java übereinstimmt.
- Ein Operator wurde eingeführt, um den Java-Typ Type@obj zu casten (@ ist der Python-Operator für das innere Produkt, in Java gibt es ihn nicht).
- Eine Notation zum Erstellen von Java-Arrays wurde hinzugefügt. Type[s1][s2][s3] für Arrays mit fester Größe, Type[:][:][:] für Arrays, die später erstellt werden.
- @FunctionalInterface ermöglicht es, Java-Funktoren aus Python-Objekten mit __call__ zu erstellen.
- Veraltete JIterator wurden entfernt, die Verwendung von JException als Fabrik, get_default_jvm_path und jpype.reflect.
- Standardmäßig erfolgt keine Konvertierung von Java-Strings in Python-Strings.
- Python hat „__int__“ als veraltet erklärt, sodass implizite Konvertierungen zwischen ganzzahligen und Gleitkommatypen einen TypeError erzeugen.
- Die Verwendung von JException wurde als veraltet erklärt. Um alle Ausnahmen abzufangen oder zu überprüfen, ob ein Objekt vom Typ Java-Ausnahme ist, sollte java.lang.Throwable verwendet werden.
- Kaskadierende Ursachen von Java-Ausnahmen werden jetzt in Python-Stack-Traces reflektiert.
- Die Verwendung von JString wurde als veraltet erklärt. Um einen Java-String zu erstellen oder zu überprüfen, ob ein Objekt vom Typ Java-String ist, verwenden Sie java.lang.String.
- In Java-Klassen wurden die repr-Methoden aktualisiert.
- java.util.List erfüllt die Verträge für collections.abc.Sequence und collections.abc.MutableSequence.
- java.util.Collection erfüllt den Vertrag für collections.abc.Collection.
- Java-Klassen sind geschlossen und werfen einen TypeError, wenn sie aus Python erweitert werden.
- Die Verarbeitung von Control-C erfolgt vorsichtig. Frühere Versionen stürzten ab, wenn Java das Control-C-Signal verarbeitete, da sie Java während des Aufrufs beendeten. Jetzt wird JPype eine InterruptedException erzeugen, wenn es aus Java zurückkehrt. Control-C wird nicht aus großen Java-Prozeduren geworfen, wie es derzeit implementiert ist, da Java kein spezielles Mittel dafür hat.
Darauf folgt die Korrekturversion 1.0.1, die Änderungen zur Umgehung von Problemen mit der Veröffentlichung von Python 3.8.4 enthält. Python hat die Logik bezüglich der Verwendung von «__setattr__» für «object» und «type» geändert, wodurch deren Verwendung zur Modifizierung abgeleiteter Klassen verhindert wird. Auch die Fehlerüberprüfung wurde aus der Methode «__setattr__» delegiert, sodass die Ausnahmearten in einigen Angemessenheitsprüfungen entsprechend aktualisiert werden müssen.
Quelle: opennet.ru
