我在尝试从Clojure填充Java类时遇到“找不到匹配的ctor”错误。
我想从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;
}
我可以导入该类:
ba2-app=> (ns ba2-app (:import Account))
Account
但是当我去填充它时,我收到了这个错误:
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)
我跟着these suggestions使用我的Clojure代码获取了内置的Java类。这些建议非常有用,因为我现在可以构建Java类。
任何指针或建议都会有所帮助。我知道班级成员应该是私人的,但这是为了测试一个更大的项目。
答案 0 :(得分:10)
使用公共访问修饰符使构造函数公开。此外,您的构造函数不接受任何 args,但只是将一堆成员设置为某些值。因此,您现在实际上只能将其称为:(Account.)
(如果它是公开的)。
如果你想使用这样的构造函数:(Account. 1000 \C 100.00 0.00 (java.util.Date. "12/21/2011"))
你必须添加一个接受这些类型参数的构造函数:
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;
}
答案 1 :(得分:4)
此构造函数不带参数。你用很多参数调用它。可能你需要刷新你的Java,或者从其他地方复制一些工作的Java(如果你的最终目标只是在你的项目中打包别人的Java)。