Tôi đang cố gắng tạo một lớp mở rộng luồng đầu vào Clojure qua gen-class
. Nếu tôi muốn gọi phương thức của lớp cha, làm cách nào để thực hiện điều đó?Làm thế nào để gọi phương thức của siêu lớp trong một phương thức lớp gen Clojure?
Trả lời
Từ (doc gen-class)
:
:exposes-methods {super-method-name exposed-name, ...}
It is sometimes necessary to call the superclass' implementation of an
overridden method. Those methods may be exposed and referred in
the new method implementation by a local name.
Vì vậy, để có thể gọi phương thức của cha mẹ fooBar
, bạn muốn nói
(ns my.custom.Foo
(:gen-class
; ...
:exposes-methods {fooBar parentFooBar}
; ...
))
Sau đó, để thực hiện fooBar
:
(defn -fooBar [this]
(combine-appropriately (.parentFooBar this)
other-stuff))
Ngoài các cơ sở :gen-class
cung cấp bởi ns
hình thức, có một gen-class
vĩ mô.
Cảm ơn câu trả lời và thông tin bổ sung trong bản chỉnh sửa. Việc bổ sung các. trong lời gọi là một chi tiết quan trọng. – Bill
Đây không phải là câu trả lời cho câu hỏi thực tế của bạn, nhưng tôi có một thư viện nhỏ để cho bạn giả vờ InputStream là một giao diện thay vì một lớp (để bạn không cần lớp gen). Hãy xem io.core.InputStream
, cho phép bạn chỉnh sửa io.core.InputStreamable
và nhận ra một InputStream tùy chỉnh. Bất cứ trường nào bạn cần chỉ có thể là người dân địa phương đóng cửa bởi reify
.
Ý tưởng thú vị. Tôi đã nghĩ về một cái gì đó như thế, nhưng cuối cùng muốn một dòng đầu vào trong trường hợp tôi muốn đưa những thứ này cho Java. – Bill
Toàn bộ vấn đề là bạn nhận được luồng đầu vào. Bạn tạo một InputStreamable mô tả logic của bạn và đưa nó vào InputStream, một lớp Java AOTed. Ví dụ, '(InputStream. (Reify InputStreamable (đọc ...) (bỏ qua ...)))'. – amalloy
@Bill Quên @ bạn trong bình luận trước. Tôi nghĩ điều đó có nghĩa là bạn không được thông báo; xin lỗi nếu bạn hiện đang nhận được thông báo thứ hai. – amalloy
- 1. Gọi một phương thức phân lớp từ siêu lớp
- 2. Làm thế nào để truy cập một phương thức siêu lớp từ một lớp lồng nhau?
- 3. Gọi phương thức ghi đè, siêu lớp cuộc gọi đã ghi đè phương thức
- 4. Java: Làm thế nào để gọi phương thức siêu từ bên trong lớp tại chỗ
- 5. Làm cách nào để gọi phương thức siêu đẳng
- 6. Gọi phương thức lớp riêng từ phương thức cá nhân
- 7. Siêu lớp có không gọi phương thức ghi đè không?
- 8. Gọi phương thức siêu siêu gọi
- 9. Gọi phương thức lớp cơ sở từ phương thức quá tải trong lớp phụ
- 10. C#: Làm thế nào để gọi một phương thức tĩnh của một lớp cơ sở từ một phương thức tĩnh của một lớp dẫn xuất?
- 11. Làm cách nào để bắt buộc lớp dẫn xuất gọi phương thức siêu? (Giống như Android)
- 12. Từ khoá "siêu" trong phương thức lớp học
- 13. Phương thức gọi trong lớp cha từ các phương thức lớp con trong Ruby
- 14. Làm thế nào để bạn gọi một phương thức cho siêu lớp đối tượng của Objective-C từ nơi khác?
- 15. Phương thức lớp gọi từ một lớp khác
- 16. Có thể gọi các phương thức của lớp con trên đối tượng siêu lớp không?
- 17. Gọi siêu phương pháp lớp tự động
- 18. gọi một phương thức tĩnh bên trong một lớp học?
- 19. Gọi phương thức lớp động trong Dart
- 20. Gọi một phương thức của một lớp chung
- 21. Cách tự động gọi phương thức của lớp trong .NET?
- 22. AS3: gọi phương thức lớp tĩnh - tên lớp và phương thức là các chuỗi
- 23. Gọi các phương thức lớp cha mẹ
- 24. Java: trả về phân lớp trong chữ ký của phương thức siêu lớp
- 25. Lớp nào đã gọi phương thức tĩnh của tôi?
- 26. Gọi phương thức từ phương thức khác trong cùng một lớp trong C++
- 27. Gọi phương thức AppDelegate từ lớp
- 28. Làm thế nào để gọi một phương thức cha mẹ từ lớp con trong javascript?
- 29. Làm thế nào để gọi một phương thức python từ một lớp java?
- 30. Làm cách nào để gọi một phương thức lớp dẫn xuất từ lớp cơ sở?
Đây là một câu hỏi cũ, nhưng đôi khi nó được chú ý. FWIW, như tôi đã sử dụng Clojure trong những năm qua, tôi đã thấy rằng nếu tôi nghĩ rằng tôi cần sức mạnh của gen-class để có được một cái gì đó như thế này được thực hiện, nó dễ dàng hơn chỉ để viết một ít Java. – Bill