2

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

私はこれをグーグルで検索しましたが、あまり見つかりませんでした。エラーは明らかに「このクラスに一致するコンストラクターが見つかりません」を意味しますが、コンストラクターは一致しているように見えます。だから私は混乱しています。

編集

渡すタイプを変更してみました(からlongint

(defn -main []
  (let [limit (int 100)
        server-builder (ServerBuilder. limit)]
    (doto
      server-builder (.begin))))
4

3 に答える 3

4

Java とは対照的に、私はclojure のプリミティブ リテラルlongsではなくints、 であり、clojure はコンストラクターを見つけることができないと信じていますServerBuilder(long)

于 2013-01-28T18:11:16.870 に答える
0

他のコンストラクター構文を試しましたか? (new ServerBuilder 100)

それ以外の場合は、Javaコードがビルドパスにないか、Javaクラスパッケージ名がserverコンパイラエラーで示されていない可能性があります。server.ServerBuilder

于 2013-01-29T16:38:56.593 に答える
-1

ClojureでJavaコンストラクターを呼び出す方法はわかりませんが、Javaでデフォルトのコンストラクターを作成してみてください。

public ServerBuilder()  {
    this.limit = 100;  //some default
}

はい、コンストラクターに引数を渡したい場合、これは明らかに機能しません。

@jtahlbornによる他の回答に基づいて、longをintにキャストできます。

(ServerBuilder. (int 100))

http://clojure.org/java_interop#JavaInteropから-いくつかの最適化のヒント

于 2013-01-28T18:07:05.440 に答える