liberación de capa , que permite que las aplicaciones Python tengan acceso completo a las bibliotecas de clases en el lenguaje Java. Con JPype de Python, puede utilizar bibliotecas específicas de Java para crear aplicaciones híbridas que combinen código Java y Python. A diferencia de Jython, la integración con Java no se logra mediante la creación de una variante de Python para la JVM, sino mediante la interacción a nivel de ambas máquinas virtuales utilizando memoria compartida. El enfoque propuesto no sólo permite lograr un buen rendimiento, sino que también proporciona acceso a todas las bibliotecas de CPython y Java. Código de proyecto licenciado bajo Apache 2.0.
Cambios importantes:
- JChar se admite como tipo de devolución. Por compatibilidad, JChar hereda de "str" e implementa una conversión implícita a "int". Por tanto, pasa controles en los contratos. Pero esto significa que ya no se considera un tipo numérico en Python y, por lo tanto, isinstance(c, int) se evalúa como False, lo cual es consistente con las reglas de conversión de tipos de Java.
- Se ha introducido un operador para convertir un tipo Java, Type@obj (@ es un operador de Python para el producto interno; Java no tiene uno).
- Se agregó notación para crear matrices Java. Escriba[s1][s2][s3] para matrices de tamaño fijo, Escriba[:][:][:] para matrices que se crearán más adelante.
- @FunctionalInterface te permite crear functores Java a partir de objetos Python con __call__.
- Se eliminó JIterator obsoleto, uso de JException como fábrica, get_default_jvm_path y jpype.reflect.
- De forma predeterminada, las cadenas de Java no se convierten en cadenas de Python.
- Python ha dejado de usar "__int__", por lo que las conversiones implícitas entre tipos enteros y de punto flotante producirán un TypeError.
- El uso de JException ha quedado obsoleto. Para detectar todas las excepciones o comprobar que un objeto es un tipo de excepción de Java, utilice java.lang.Throwable.
- Las causas en cascada de las excepciones de Java ahora se reflejan en los marcos de pila de Python.
- JString ha quedado obsoleto. Para crear una cadena Java o comprobar que un objeto es del tipo cadena Java, utilice java.lang.String.
- Los métodos repr se han actualizado en las clases de Java.
- java.util.List ejecuta contratos para collections.abc.Sequence y collections.abc.MutableSequence.
- java.util.Collection ejecuta el contrato para collections.abc.Collection.
- Las clases de Java son privadas y arrojarán TypeError cuando se extienden desde Python.
- Maneje Control-C con cuidado. Las versiones anteriores fallan cuando Java procesa una señal Control-C porque finalizarán Java durante la llamada. JPype ahora generará una excepción interrumpida al regresar de Java. Control-C no descartará procedimientos Java grandes tal como se implementan actualmente, ya que Java no tiene una herramienta especial para esto.
A continuación, se creó una versión correctiva 1.0.1, que agregó cambios para solucionar problemas con la versión Python 3.8.4. Python ha cambiado la lógica con respecto al uso de "__setattr__" para "objeto" y "tipo", impidiendo que se use para modificar clases derivadas. La comprobación de errores también se ha delegado desde el método "__setattr__", por lo que los tipos de excepción en algunas comprobaciones de adecuación deben actualizarse en consecuencia.
Fuente: opennet.ru
