2011-12-21 28 views
7

Tôi nhận được lỗi "Không tìm thấy ctor phù hợp" trong khi cố gắng điền một lớp Java từ Clojure."Không tìm thấy ctor phù hợp" trong khi cố gắng điền một lớp Java từ Clojure

Tôi muốn phổ biến lớp này từ Clojure.

import java.util.Date; 

public class Account { 
    Account() { acct_num = 0; 
       trans_type = 'U'; 
       trans_amt = 0.00; 
       cur_bal = 0.00; 
       last_update = null; 
       } 

    public int acct_num = 0; 
    public char trans_type; 
    public double trans_amt = 0.00; 
    public double cur_bal = 0.00; 
    public Date last_update; 
} 

tôi có thể nhập khẩu các lớp:

ba2-app=> (ns ba2-app (:import Account)) 
Account 

nhưng khi tôi đi đến cư nó, tôi nhận được lỗi này:

ba2-app=> (:use java.util.Date) 
nil 
ba2-app=> (Account. 1000 \C 100.00 0.00 (java.util.Date. "12/21/2011")) 
java.lang.IllegalArgumentException: No matching ctor found for class Account (NO_SOURCE_FILE:9) 

Tôi đi theo these suggestions để có được những lớp Java được xây dựng trong với mã Clojure của tôi. Các gợi ý rất hữu ích, bởi vì bây giờ tôi có thể xây dựng lớp Java.

Mọi gợi ý hoặc đề xuất sẽ hữu ích. Tôi biết các thành viên trong lớp nên là riêng tư, nhưng đây là để thử nghiệm một dự án lớn hơn.

Trả lời

10

Đặt hàm tạo công khai với công cụ sửa đổi truy cập công cộng. Ngoài ra, hàm tạo của bạn không chấp nhận bất kỳ số nào args, nhưng chỉ đặt một nhóm thành viên thành một số giá trị. Vì vậy, bây giờ bạn có thể thực sự chỉ gọi nó là: (Account.) (nếu nó được công khai).

Khi bạn muốn sử dụng một constructor như thế này: (Account. 1000 \C 100.00 0.00 (java.util.Date. "12/21/2011")) bạn sẽ có thêm một constructor chấp nhận các loại đối số:

public Account(int a, char c, double d1, double d2, Date date) { 
     acct_num = a; 
     trans_type = c; 
     trans_amt = d1; 
     cur_bal = d2; 
     last_update = date; 
    } 
+0

Cảm ơn. công cộng là nó cùng với việc thay đổi các nhà xây dựng để cư trú tất cả các lĩnh vực. – octopusgrabbus

4

constructor này có không có đối số. Bạn đang gọi nó với rất nhiều đối số. Có lẽ bạn cần phải đánh dấu trên Java của bạn, hoặc sao chép một số Java làm việc từ một nơi nào khác (nếu mục tiêu cuối cùng của bạn chỉ là để đóng gói Java của người khác trong dự án của bạn).

+0

Tôi phải đăng một phiên bản khác, bởi vì tôi nhận thấy rằng, được xây dựng lại và nhận được lỗi tương tự. Tôi sẽ đi sửa câu hỏi. – octopusgrabbus

+0

Cảm ơn bạn và bạn đã đúng về việc đánh răng. Tôi đang đặt hàng một cuốn sách. Tôi đã duy trì một ứng dụng Java từ nhiều năm trước. Rất nhiều thay đổi kể từ đó. – octopusgrabbus

Các vấn đề liên quan