2014-10-17 5 views
0

나는 Clojure 코드에서 Java 클래스를 생성하기 위해 gen 클래스를 사용한다. gen 클래스를 작동 시키려면 클래스에 추가 할 모든 메소드 (여기서는 this)에 첫 번째 매개 변수를 추가해야합니다.clojure에서 gen-class 메소드를 호출하는 방법

(ns com.stackoverflow.clojure.testGenClass 
    (:gen-class 
    :name com.stackoverflow.clojure.TestGenClass 
    :implements [com.stackoverflow.clojure.TestGenClassInterface] 
    :prefix "java-")) 

(def ^:private pre "START: ") 

(defn java-addToString [this text post] 
    (str pre text post)) 

컴파일 한 후 Java 문맥에서 메서드를 호출해도 문제가 없습니다.

(def var (com.stackoverflow.clojure.TestGenClass.)) 
(.addToString var "Aus Clojure heraus (Methode 1)." " :ENDE") 
(. var addToString "Aus Clojure heraus (Methode 2)." " :ENDE") 

하지만 어떻게 Clojure에서 직접 시작할 수 있습니까?

첫 번째 매개 변수가 없기 때문에 다음과 같은 Thge가 작동하지 않습니다.

(java-addToString "TexT" " :END") 

단순히 첫 번째 매개 변수가 비어있는 함수를 호출하는 것이 좋습니까?

(java-addToString "" "TexT" " :END") 

아니면 함수를 추가해야합니다 (예를 들어, addToString) 내가 내부적으로 사용하고 클래스 파일의 방법으로 추가됩니다 하나에서이 함수를 호출하는?

답변

0

생성 된 클래스의 메소드와 동일한 코드를 처리하고 해당 클래스와 별도의 함수로 사용하면 (코드 냄새의 의미에서 디자인 어딘가에 문제가 있음을 나타냄) .

아마도 addToString은 정적 방법이어야합니까?

아마도 클로저에서 직접 사용할 수있는 add-to-string 함수를 만들고 addToString 메서드에서 호출해야할까요?

우리가 가장 좋은 답변을 알기 전에 더 큰 디자인에 대해 더 많이 알아야하지만 그 중 하나라고 생각됩니다.