小编Edu*_* MC的帖子

在 Clojure 中调用非静态 Java 方法

在 Clojure 中调用静态 Java 方法很流畅;没问题。但是当我调用一个非静态方法时,它会抛出一个错误,尽管我已经尝试了一些点 (.) 表示法的变体,如Clojure Interop 文档中所述

Java类:

public class CljHelper {

  public void test(String text) {
    System.out.println(text);
  }

}
Run Code Online (Sandbox Code Playgroud)

Clojure 代码:

(ns com.acme.clojure.Play
  (:import [com.acme.helpers CljHelper]))

(. CljHelper test "This is a test")  
Run Code Online (Sandbox Code Playgroud)

错误:

java.lang.IllegalArgumentException: No matching method: test
Run Code Online (Sandbox Code Playgroud)

这是另一种尝试,它使 Java 方法被执行,但在之后立即抛出错误:

(defn add-Id
  [x]
  (let [c (CljHelper.)]
    ((.test c x))))        ;;; java.lang.NullPointerException: null in this line

(add-Id "id42")
Run Code Online (Sandbox Code Playgroud)

错误:

java.lang.NullPointerException: null
Run Code Online (Sandbox Code Playgroud)

java interop clojure

3
推荐指数
1
解决办法
97
查看次数

标签 统计

clojure ×1

interop ×1

java ×1