Stack Overflowでこの関連する質問を見つけましたが、実際には私の質問に答えませんでした。
JARファイルとしてパッケージ化したJavaアプリケーションがあります。また、JARファイルとしてパッケージ化したClojureアプリケーションもあります。私は今、最初の2つをライブラリとして使用する別のClojureアプリケーションを作成しています。
これが私のエラーの原因と思われるJavaコードです。
public class ServerBuilder {
private HashMap<String, ResponseObject> routes = new HashMap<String, ResponseObject>();
public int limit;
public ServerSocket serverSocket;
private ThreadBuilder threadBuilder;
public int count;
public ServerBuilder(int limit) {
this.limit = limit;
}
public void begin() throws IOException {
if(getServerSocket() == null) {
this.serverSocket = new ServerSocket(4444);
}
int count = 0;
while(count < limit) {
createThreadBuilder(serverSocket);
new Thread(threadBuilder).start();
count = count + 1;
this.count = count;
}
}
次に、Clojureコードで、次のようにJavaコードにアクセスしています。
(ns browser_tic_tac_toe.core
(:import (server ServerBuilder)))
(defn -main []
(let [server-builder (ServerBuilder. 100)] ; the error points me to this line
(doto
server-builder (.begin))))
私が得るエラーは次のとおりです。
Exception in thread "main" java.lang.IllegalArgumentException: No matching ctor found for class server.ServerBuilder
私はこれをグーグルで検索しましたが、あまり見つかりませんでした。エラーは明らかに「このクラスに一致するコンストラクターが見つかりません」を意味しますが、コンストラクターは一致しているように見えます。だから私は混乱しています。
編集
渡すタイプを変更してみました(からlong
)int
:
(defn -main []
(let [limit (int 100)
server-builder (ServerBuilder. limit)]
(doto
server-builder (.begin))))