JPype 1.0 versiyasi, Python'dan Java sinflariga kirish uchun kutubxonalar

Mavjud qatlamni chiqarish JPype 1.0, bu Python ilovalariga Java tilidagi sinf kutubxonalariga to'liq kirish imkonini beradi. Python'dan JPype bilan siz Java va Python kodlarini birlashtirgan gibrid ilovalarni yaratish uchun Java-ga xos kutubxonalardan foydalanishingiz mumkin. Jython-dan farqli o'laroq, Java bilan integratsiya JVM uchun Python variantini yaratish orqali emas, balki umumiy xotiradan foydalangan holda ikkala virtual mashina darajasida o'zaro ta'sir qilish orqali erishiladi. Taklif etilayotgan yondashuv nafaqat yaxshi ishlashga erishishga imkon beradi, balki barcha CPython va Java kutubxonalariga kirishni ta'minlaydi. Loyiha kodi tarqaladi Apache 2.0 ostida litsenziyalangan.

Asosiy o'zgarishlar:

  • JChar qaytish turi sifatida qo'llab-quvvatlanadi. Moslik uchun JChar "str" ​​dan meros oladi va "int" ga yashirin konvertatsiyani amalga oshiradi. Shuning uchun u shartnomalarda tekshiruvdan o'tadi. Lekin bu shuni anglatadiki, u endi Pythonda raqamli tur hisoblanmaydi va shuning uchun isinstance(c, int) False deb baholanadi, bu Java turini o'zgartirish qoidalariga mos keladi.
  • Java turini translatsiya qilish uchun operator joriy etildi, Type@obj (@ - ichki mahsulot uchun Python operatori; Java-da bunday operator yo'q).
  • Java massivlarini yaratish uchun belgi qo'shildi. Ruxsat etilgan oΚ»lchamli massivlar uchun [s1][s2][s3] yozing, keyinroq yaratiladigan massivlar uchun [:][:][:] yozing.
  • @FunctionalInterface __call__ yordamida Python obyektlaridan Java funktorlarini yaratish imkonini beradi.
  • Eskirgan JIterator olib tashlandi, JException-dan zavod sifatida foydalanish, get_default_jvm_path va jpype.reflect.
  • Odatiy bo'lib, Java satrlari Python satrlariga aylantirilmaydi.
  • Python "__int__" ni bekor qildi, shuning uchun butun va suzuvchi nuqta turlari o'rtasida yashirin translyatsiyalar TypeError hosil qiladi.
  • JException dan foydalanish bekor qilindi. Barcha istisnolarni qo'lga olish yoki ob'ekt Java istisno turi ekanligini tekshirish uchun java.lang.Throwable dan foydalaning.
  • Java istisnolarining kaskadli sabablari endi Python stek ramkalarida aks ettirilgan.
  • JString eskirgan. Java satrini yaratish yoki obyektning Java string turiga tegishli ekanligini tekshirish uchun java.lang.String dan foydalaning.
  • Repr usullari Java sinflarida yangilandi.
  • java.util.List collections.abc.Sequence va collections.abc.MutableSequence uchun shartnomalarni bajaradi.
  • java.util.Collection collections.abc.Collection shartnomasini bajaradi.
  • Java sinflari shaxsiydir va Python-dan kengaytirilganda TypeError-ni chiqaradi.
  • Control-C ni ehtiyotkorlik bilan ishlating. Avvalgi versiyalar Java Control-C signalini qayta ishlaganda ishdan chiqadi, chunki ular qo'ng'iroq paytida Java-ni to'xtatadi. JPype endi Java-dan qaytganida InterruptedException-ni chiqaradi. Control-C hozirda amalga oshirilayotgan katta Java protseduralarini chiqarib tashlamaydi, chunki Java-da buning uchun maxsus vosita yo'q.

Keyinchalik, Python 1.0.1 versiyasi bilan bog'liq muammolarni hal qilish uchun o'zgarishlar qo'shilgan tuzatuvchi reliz 3.8.4 yaratildi. Python "ob'ekt" va "turi" uchun "__setattr__" dan foydalanish mantiqini o'zgartirib, undan olingan sinflarni o'zgartirish uchun foydalanishga yo'l qo'ymaydi. Xatolarni tekshirish ham "__setattr__" usulidan berilgan, shuning uchun ba'zi muvofiqlik tekshiruvlarida istisno turlari mos ravishda yangilanishi kerak.

Manba: opennet.ru

a Izoh qo'shish