verze vrstvy , která umožňuje plný přístup Python aplikací k Java knihovnám tříd. Pomocí JPype je možné využívat specifické Java knihovny z Pythonu a vytvářet hybridní aplikace kombinující kód v Java a Python. Na rozdíl od Jythonu, integrace s Java je dosažena nikoli vytvořením varianty Pythonu pro JVM, ale interakcí na úrovni obou virtuálních strojů s využitím sdílené paměti. Tento přístup nejenže poskytuje dobrou výkonnost, ale také umožňuje přístup ke všem knihovnám CPython a Java. Kód projektu pod licencí Apache 2.0.
Hlavní změny:
- JChar je podporován jako návratový typ. Pro kompatibilitu JChar dědí ze „str“ a implementuje implicitní převod na „int“. Proto prochází kontrolami v kontraktech. To však znamená, že již není považován za číselný typ v Pythonu a proto isinstance(c, int) vrací hodnotu False, což je v souladu s pravidly převodu typů v Java.
- Byl zaveden operátor pro převod Java typu Type@obj (@ — to je operátor Pythonu pro vnitřní vynásobení, v Java neexistuje).
- Byla přidána notace pro vytváření Java polí. Type[s1][s2][s3] pro pole pevných velikostí, Type[:][:][:] pro pole, která budou vytvořena později.
- @FunctionalInterface umožňuje vytvářet Java funkce z Python objektů s __call__.
- Byly odstraněny zastaralé JIterator, použití JException jako továrny, get_default_jvm_path a jpype.reflect.
- Ve výchozím nastavení k převodu Java řetězců na Python řetězce nedochází.
- Python označil „__int__“ jako nedoporučovaný, takže implicitní převody mezi celými a plovoucími typy budou vyvolávat TypeError.
- Použití JException bylo označeno jako zastaralé. Aby bylo možné zachytit všechna výjimky, nebo zkontrolovat, že objekt je typ Java výjimky, měli byste použít java.lang.Throwable.
- Kaskádové příčiny Java výjimek jsou nyní odráženy v zásobnících Python.
- Použití JString bylo označeno jako zastaralé. Chcete-li vytvořit Java řetězec, nebo zkontrolovat, že objekt má typ Java řetězce, použijte java.lang.String.
- V Java třídách byly aktualizovány repr metody.
- java.util.List plní kontrakty pro collections.abc.Sequence a collections.abc.MutableSequence.
- java.util.Collection plní kontrakt pro collections.abc.Collection.
- Java třídy jsou uzavřené a při rozšiřování z Pythonu vyvolávají TypeError.
- Zpracování Control-C probíhá opatrně. Předchozí verze selhaly, když Java zpracovávala signál Control-C, protože ukončily Javu během volání. Nyní JPype vytvoří InterruptedException, když se vrátí z Javy. Control-C nebude přeskakovat z velkých Java procedur, jak je nyní implementováno, protože Java nemá žádný speciální prostředek pro tento účel.
Bylo vydáno korekční vydání 1.0.1, které obsahuje změny pro obcházení problémů s verzí Pythonu 3.8.4. Python změnil logiku týkající se používání „__setattr__“ pro „object“ a „type“, což brání jeho použití pro změnu odvozených tříd. Další kontroly chyb byly delegovány z metody „__setattr__“, takže typy výjimek v některých validacích musí být příslušně aktualizovány.
Zdroj: opennet.ru
