尝试从Clojure填充Java类时,“找不到匹配的ctor”

时间:2011-12-21 20:45:38

标签: java clojure

我在尝试从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类。

任何指针或建议都会有所帮助。我知道班级成员应该是私人的,但这是为了测试一个更大的项目。

2 个答案:

答案 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)。