Vì mục đích tương hợp với Java, tôi cần một lớp có hàm tạo null để thực hiện khởi tạo. Đối tượng của lớp này cần phải có một cái gì đó giống như các trường java có thể thay đổi (cụ thể là, đối tượng đại diện cho phần phụ của trò chơi và cần giữ trạng thái trò chơi).Thêm hàm tạo vào deftype tạo lớp
deftype hiện mọi thứ Tôi muốn làm ngoại trừ cung cấp hàm tạo null (vì tôi đang tạo lớp với các trường).
Tôi không cần các trường có thể đọc công khai, vì vậy tôi có thể nghĩ đến 4 giải pháp:
Sử dụng cấp độ gen; Tôi không muốn làm điều này nếu tôi có thể tránh nó.
Bằng cách nào đó mã hóa các biến thành viên riêng tư bên ngoài kiến thức về deftype; Tôi đã nói với điều này không thể được thực hiện.
Viết một định dạng sửa đổi cũng tạo ra một hàm tạo null; thẳng thắn tôi không biết clojure đủ tốt cho việc này.
Lấy lớp được tạo bởi deftype và bằng cách nào đó thêm một hàm tạo mới vào nó.
Khi kết thúc điều này, tôi cần phải có một lớp Java, vì tôi sẽ chuyển nó sang mã Java để tạo một đối tượng mới từ lớp.
Có bất kỳ giải pháp nào tôi đã đề xuất (hoặc bất kỳ giải pháp nào mà tôi chưa từng nghĩ đến) ngoài việc sử dụng lớp gen khả thi?
Dường như việc tạo dựng hàm tạo nằm sâu bên trong mã java của clojure. Vì vậy, sửa đổi deftype chính nó âm thanh chút khó khăn và một chút ý tưởng tồi. –
các trường sẽ được truy cập như thế nào và cá thể đã tạo ra yourClass.newInstance() và phản ánh? SO có lẽ biết nhiều hơn về việc sử dụng Java bên cho lớp được tạo ra sẽ giúp đỡ nếu không tôi sợ rằng đó là thời gian cho gen-class: ( –