Sebagian dari masalahnya adalah JavaMetaClass. new mengasumsikan bahwa itu akan selalu dipanggil untuk membuat proxy, ketika itu akan dipanggil untuk setiap kelas turunan. Pada baris yang sama, penanganan jclass_registry harus dibatasi untuk proxy yang sebenarnya. Hal lain yang saya temukan adalah bahwa perlakuan objek yang dikembalikan dari Java lemah, yang membuatnya tidak mungkin untuk meneruskannya kembali ke metode Java.
Saya dapat mengerjakan beberapa masalah ini pada waktunya.
Saya sangat menyukai seberapa cepat jnius memuat Java, dan dapat menggunakan versi terbaru Python.
Ingin mendukung masalah ini? Posting hadiah di atasnya! Kami menerima bounty melalui Bountysource .
Maaf atas keterlambatannya, dapatkah Anda memberikan deskripsi (testcases?) yang lebih spesifik untuk setiap masalah tersebut? Saya memulai beberapa pekerjaan untuk mengizinkan pewarisan kelas Java dari python (menggunakan proxy), tetapi itu tidak lengkap, namun, masalah yang Anda tunjukkan di sini tampaknya terkait secara longgar dengan itu, dan mungkin harus dibagi dalam beberapa masalah berbeda.
Maaf untuk masuk ke diskusi, tetapi mewarisi Java sebuah kelas mungkin bukan yang Anda butuhkan @Apalala , saya pikir itu ide yang lebih baik untuk membungkus kelas Java di kelas Python seperti yang dilakukan di kelas ini . Mungkin tidak jelas dalam kode yang ditautkan karena semua autoclass dilakukan di Java.py tetapi kodenya setara dengan
class MyJavaWrapperClass(AnyPythonClassOrMixin):
def __init__(self, *args, **kwargs):
JavaClass = autoclass('org.uber.cool.JavaClass`)
self._my_java_object = JavaClass(*args, **kwargs) # use double underscore to "hide" the Java object
Alasan untuk tidak mewarisi kelas Java adalah:
class Element
, class Node
dan class Relationship
dalam grafik , hampir semuanya memiliki kode boilerplate meskipun sebagian besar waktu untuk membuat API lebih Pythonic ;)Dari segi performa, saya rasa tidak ada pengaruhnya, tapi @tshirtman mungkin lebih tahu.
Hal lain, membungkus objek Java berfungsi sekarang dan sangat baik :-)
Apakah mengganti metode Java menggunakan kode python mungkin untuk saat ini?
Bagaimana dengan pewarisan kelas java?
Saya telah menghabiskan cukup banyak waktu untuk melihat ini, dan saya sampai pada kesimpulan bahwa tidak ada cara praktis untuk melakukannya, selain menghasilkan bytecode Java saat runtime, ada perpustakaan untuk melakukan itu, tetapi rasanya seperti menambahkan banyak komplikasi ke perpustakaan, dan mungkin di luar jangkauan. Tidak yakin tentang penutupan, tetapi saya tidak berpikir itu akan berhasil, jadi tidak masuk akal untuk menandainya sebagai tidak akan diperbaiki.
@monami7001 ada kemajuan?
itu ~ 4 tahun yang lalu, dan setahu saya tidak, menghasilkan Java bytecode saat runtime masih terlihat seperti satu-satunya pilihan (dan mungkin itu tidak seburuk yang saya pikirkan dan kita harus melihat ke dalamnya).
Salah satu solusi adalah:
untuk menggunakannya dengan autoclass