Tôi sẽ viết giao diện Python-Java của riêng mình. Nó được biên dịch dưới dạng một tệp DLL và được bao bọc bằng cách sử dụng các loại ctypes.Giao diện Python-Java của tôi, thiết kế tốt? Và làm thế nào để bọc chức năng JNI?
Tuy nhiên, có thể tìm thấy các lớp Java và phân bổ các đối tượng Java. Nhưng giao diện nào sẽ là ngôn ngữ khác mà không sử dụng các đối tượng đó phương pháp? Mục tiêu của tôi là làm cho điều này là tự nhiên nhất có thể. Thật không may, không chỉ có thể tìm các phương thức Java chỉ theo tên.
mô hình của tôi là như sau:
JClass
- Một thể hiện của lớp này đại diện cho một lớp Java.
JObject
- Một thể hiện của lớp này đại diện cho một Java-đối tượng. Nó phải là được khởi tạo với phiên bản JClass. (Chưa, tất nhiên, sau đó nên có những lập luận cho các nhà xây dựng cũng có.)
JMethod
Đại diện cho một phương pháp của một Java-đối tượng. Nó chứa tên và chữ ký của phương pháp mong muốn. Chữ ký được đánh giá động bởi các lớp được đưa ra khi khởi tạo.
Ví dụ:
mainMethod = JMethod('main', JStringArray)
Lưu ý rằng
JStringArray
là một thể hiện của JClass đại diện cho một chuỗi mảng.Một JMethod có thể được thêm vào một trường hợp JClass. Nhưng sau đó có thể được gọi là chỉ từ một JObject instantiated.
JStaticMethod
- Cũng giống như các JMethod, nhưng nó cũng có thể được gọi từ một JClass dụ.
Built-In các loại
tôi đang làm
JInt
,JShort
,JLont
,JChar
, vv .. là built-in loại wrapper.Giống như:
JInt = JClass('java/lang/Integer') JShort = JClass('java/lang/Short') JString = JClass('java/lang/String')
Câu hỏi (s):
- Bạn nghĩ gì về thiết kế này?
- JNI-Functions cho các phương thức gọi của lớp Java/-object tất cả lấy số lượng đối số thay đổi. Sau khi đọc một số chủ đề trên gọi một hàm có đối số biến từ một hàm làm như vậy, và cũng đã đặt câu hỏi tại đây trên SO, tôi biết rằng điều này là không thể.
Bây giờ, có các hàm không có số lượng đối số biến không nhưng là một sốva_list
hoặc một cái gì đó? Tôi chỉ cần tìm một số cách để gọi một phương thức từ Python trong Java!
Chỉ cần nhìn vào câu trả lời của tôi từ 2 năm trước và nhận ra đó là sự thô lỗ không thể tin được ... Tôi thực sự xin lỗi vì điều đó. Cảm ơn vì đã không bị giật như tôi. –