rilascio del modulo , che permette l'accesso completo delle applicazioni Python alle librerie di classi Java. Con JPype, è possibile utilizzare le librerie specifiche di Java da Python, creando applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java non avviene attraverso una variante di Python per la JVM, ma attraverso un'interazione a livello di entrambe le macchine virtuali, utilizzando la memoria condivisa. Questo approccio consente non solo di ottenere buone prestazioni, ma fornisce anche accesso a tutte le librerie CPython e Java. Il codice del progetto sotto licenza Apache 2.0.
Principali modifiche:
- JChar è supportato come tipo restituito. Per compatibilità, JChar è ereditato da 'str' e implementa una conversione implicita in 'int'. Pertanto, supera le verifiche nei contratti. Ma ciò significa che non è più considerato un tipo numerico in Python e quindi isinstance(c, int) restituisce False, il che è coerente con le regole di conversione dei tipi in Java.
- È stato introdotto un operatore per convertire il tipo Java Type@obj (@ è l'operatore Python per il prodotto interno, non presente in Java).
- Sono state aggiunte le annotazioni per creare array Java. Type[s1][s2][s3] per array di dimensioni fisse, Type[:][:][:] per array che saranno creati in seguito.
- @FunctionalInterface consente di creare funzioni Java da oggetti Python con __call__.
- Rimossi JIterator obsoleti, l'uso di JException come fabbrica, get_default_jvm_path e jpype.reflect.
- Per impostazione predefinita, non avviene la conversione delle stringhe Java in stringhe Python.
- Python ha dichiarato deprecato '__int__', quindi le conversioni implicite tra tipi interi e a virgola mobile genereranno TypeError.
- È stata dichiarata obsoleta l'uso di JException. Per catturare tutte le eccezioni o verificare che un oggetto sia di tipo eccezione Java, si deve usare java.lang.Throwable.
- Le cause a cascata delle eccezioni Java sono ora riflesse nei frame dello stack Python.
- L'uso di JString è stato dichiarato obsoleto. Per creare una stringa Java o verificare se un oggetto è di tipo stringa Java, utilizzare java.lang.String.
- I metodi repr nelle classi Java sono stati aggiornati.
- java.util.List implementa i contratti per collections.abc.Sequence e collections.abc.MutableSequence.
- java.util.Collection implementa il contratto per collections.abc.Collection.
- Le classi Java sono chiuse e genereranno un TypeError se estese da Python.
- Gestione accurata di Control-C. Le versioni precedenti andavano in crash quando Java gestiva il segnale Control-C, poiché terminavano Java durante la chiamata. Ora JPype genererà InterruptedException quando viene restituito da Java. Control-C non si interromperà durante grandi procedure Java, come attualmente implementato, poiché Java non ha un modo speciale per farlo.
È stata creata una nuova versione correttiva 1.0.1, che include aggiornamenti per risolvere problemi con il rilascio di Python 3.8.4. Python ha cambiato la logica relativa all'uso di «__setattr__» per «object» e «type», impedendo l'uso per modificare le classi derivate. Inoltre, il controllo degli errori è stato delegato dal metodo «__setattr__», quindi i tipi di eccezione in alcuni controlli di validità devono essere aggiornati di conseguenza.
Fonte: opennet.ru
