liberación de capas intermedias , que lle permite organizar o acceso total das aplicacións Python ás bibliotecas de clases Java. Con JPype de Python, pode usar bibliotecas específicas de Java para crear aplicacións híbridas que combinen código Java e Python. A diferenza de Jython, a integración con Java conséguese non mediante a creación dunha variante de Python para a JVM, senón mediante a interacción a nivel de ambas máquinas virtuais mediante a memoria compartida. O enfoque proposto permite non só acadar un bo rendemento, senón que tamén proporciona acceso a todas as bibliotecas CPython e Java. Código do proxecto licenciado baixo Apache 2.0.
Principais cambios:
- JChar é compatible como tipo de retorno. Para compatibilidade, JChar deriva de "str" e implementa unha conversión implícita a "int". Polo tanto, pasa comprobacións nos contratos. Pero isto significa que xa non se considera un tipo numérico en Python, polo que isinstance(c, int) avalíase como False, o que é coherente coas regras de conversión de tipos de Java.
- Introduciuse un operador para emitir o tipo Java Type@obj (@ - este é un operador Python para o produto interno, non existe en Java).
- Engadida notación para crear matrices Java. Escriba[s1][s2][s3] para matrices de tamaños fixos, escriba[:][:][:] para matrices que se crean máis tarde.
- @FunctionalInterface permítelle crear functores Java a partir de obxectos Python con __call__.
- Elimináronse JIterator obsoletos, o uso da fábrica de JException, get_default_jvm_path e jpype.reflect.
- Por defecto, as cadeas Java non se converten en cadeas Python.
- Python desaprobou "__int__", polo que as conversións implícitas entre os tipos enteiros e flotantes producirán un TypeError.
- Uso obsoleto de JException. Para detectar todas as excepcións ou comprobar que un obxecto é un tipo de excepción Java, segue java.lang.Throwable.
- As causas das excepcións de Java en cascada agora reflíctense nos marcos da pila de Python.
- Uso obsoleto de JString. Para crear unha cadea Java ou comprobar que un obxecto é do tipo cadea Java, use java.lang.String.
- Actualizáronse os métodos Repr nas clases Java.
- java.util.List cumpre os contratos de collections.abc.Sequence e collections.abc.MutableSequence.
- java.util.Collection cumpre co contrato de for collections.abc.Collection.
- As clases de Java son privadas e xerarán un TypeError cando se estendan desde Python.
- Manexa o Control-C con coidado. As versións anteriores fallan cando Java manexa un sinal Control-C, xa que finalizarán Java durante a chamada. JPype agora lanzará unha InterruptedException cando regrese de Java. Control-C non eliminará as grandes rutinas de Java como o fai actualmente, xa que Java non ten unha instalación especial para iso.
A continuación formouse unha versión de parche de 1.0.1, que engadiu cambios para solucionar problemas coa versión de Python 3.8.4. Python cambiou a lóxica relativa ao uso de "__setattr__" para "obxecto" e "tipo", evitando que se usase para cambiar as clases derivadas. Ademais, a comprobación de erros foi delegada desde o método "__setattr__", polo que os tipos de excepción nalgunhas comprobacións de cordura deben actualizarse en consecuencia.
Fonte: opennet.ru
