Główne zmiany:
- JChar jest obsługiwany jako typ zwracany. Dla kompatybilności JChar dziedziczy z „str” i implementuje niejawną konwersję na „int”. Dlatego przechodzi kontrolę umów. Oznacza to jednak, że nie jest już uważany za typ numeryczny w Pythonie i dlatego isinstance(c, int) zwraca wartość False, co jest zgodne z regułami konwersji typów Java.
- Wprowadzono operator do rzutowania typu Java, Type@obj (@ jest operatorem Pythona dla produktu wewnętrznego; Java go nie ma).
- Dodano notację do tworzenia tablic Java. Wpisz[s1][s2][s3], aby uzyskać tablice o stałym rozmiarze, wpisz[:][:][:], aby uzyskać tablice, które zostaną utworzone później.
- @FunctionalInterface umożliwia tworzenie funktorów Java z obiektów Pythona za pomocą __call__.
- Usunięto przestarzały JIterator, użycie JException jako fabryki, get_default_jvm_path i jpype.reflect.
- Domyślnie ciągi Java nie są konwertowane na ciągi Pythona.
- Python ma przestarzałe „__int__”, więc niejawne rzutowanie między typami całkowitymi i zmiennoprzecinkowymi spowoduje wygenerowanie błędu TypeError.
- Użycie JException zostało przestarzałe. Aby wychwycić wszystkie wyjątki lub sprawdzić, czy obiekt jest typem wyjątku Java, użyj Java.lang.Throwable.
- Kaskadowe przyczyny wyjątków Java są teraz odzwierciedlane w ramkach stosu Pythona.
- JString jest przestarzały. Aby utworzyć ciąg Java lub sprawdzić, czy obiekt jest typu ciąg Java, użyj Java.lang.String.
- Metody Repr zostały zaktualizowane w klasach Java.
- java.util.List wykonuje kontrakty dla kolekcji.abc.Sequence i Collections.abc.MutableSequence.
- java.util.Collection realizuje umowę dotyczącą kolekcji.abc.Collection.
- Klasy Java są prywatne i po rozszerzeniu z Pythona rzucą błąd TypeError.
- Obchodź się ostrożnie z Control-C. Poprzednie wersje ulegają awarii, gdy Java przetwarza sygnał Control-C, ponieważ powodują one zakończenie działania Java podczas wywołania. JPype będzie teraz zgłaszał wyjątek InterruptedException podczas powrotu z Java. Control-C nie wyrzuci dużych procedur Java, jakie są obecnie stosowane, ponieważ Java nie ma do tego specjalnego narzędzia.
Następnie utworzono wersję korygującą 1.0.1, która dodała zmiany mające na celu obejście problemów z wersją Pythona 3.8.4. Python zmienił logikę dotyczącą użycia „__setattr__” dla „obiektu” i „typu”, uniemożliwiając użycie go do modyfikowania klas pochodnych. Sprawdzanie błędów zostało również delegowane z metody „__setattr__”, dlatego należy odpowiednio zaktualizować typy wyjątków w niektórych kontrolach adekwatności.
Źródło: opennet.ru