Ví dụ lớp Java này:phương pháp Làm thế nào để gọi quá tải Java trong Clojure
package foo;
public class TestInterop
{ public String test(int i)
{ return "Test(int)"; }
public String test(Object i)
{ return "Test(Object)"; }
}
Khi tôi bắt đầu Clojure và cố gắng gọi phương thức thử nghiệm (int), các phương pháp thử nghiệm (Object) được gọi thay vào đó, bởi vì Clojure tự động đóng số nguyên vào một đối tượng java.lang.Integer.
Làm cách nào để buộc Clojure gọi phương thức thử nghiệm (int)?
user=> (.test (new foo.TestInterop) 10)
"Test(Object)"
Tôi muốn gọi các phương thức như Component.add(Component comp, int index)
trong AWT, nhưng thay vì tiếp tục gọi add(Component comp, Object constraints)
, vì vậy các nút trên thanh công cụ của tôi luôn xuất hiện theo thứ tự sai.
Điều đó giải thích tại sao nó luôn hoạt động trong các chương trình thử nghiệm chứ không phải trong chương trình thực. Tôi đưa vào gợi ý loại trên cuộc gọi, và nó bây giờ làm việc tốt. Cảm ơn rất nhiều. Tôi đã có một shot để thực hiện một macro cho điều này, vì bạn có thể lấy lớp từ biến, nhưng có vẻ như các gợi ý kiểu không macro-ise. –
Rất vui khi biết điều đó! Oh, và thực sự nó có thể xử lý các gợi ý kiểu trong các macro - và đôi khi một macro được thiết kế tốt có thể tạo ra mã được gợi ý độc đáo với cách gõ tối thiểu. Bạn có thể đăng câu hỏi riêng về điều đó nếu bạn muốn được trợ giúp bằng cách viết một câu hỏi. –
Tôi không thể làm điều này để làm việc với mã của tôi, mặc dù tình hình của tôi hơi khác một chút. Các phương thức java mà tôi đang cố gọi là 'Application.launch' của JavaFX. Tôi muốn phương thức 'launch' tĩnh với đối số' Class mở rộng Application> 'và dường như không cung cấp gợi ý kiểu cho lời gọi của tôi (tôi đã thử nhiều cách tiếp cận) khiến phương thức' launch' được gọi chính xác và tôi nhận được lỗi "Class không thể được cast thành String". – Jason