gpt4 book ai didi

java - 在 Clojure 中调用非静态 Java 方法

转载 作者:行者123 更新时间:2023-12-01 14:06:28 25 4
gpt4 key购买 nike

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

Java类:

public class CljHelper {

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

}

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

(. CljHelper test "This is a test")

错误:
java.lang.IllegalArgumentException: No matching method: test

这是另一种尝试,它使 Java 方法被执行,但在之后立即抛出错误:
(defn add-Id
[x]
(let [c (CljHelper.)]
((.test c x)))) ;;; java.lang.NullPointerException: null in this line

(add-Id "id42")

错误:
java.lang.NullPointerException: null

最佳答案

你在这里有两个不同的问题。在第一个示例中,您尝试调用类 CljHelper 上的方法。 .您应该在实例上调用它,而不是在类上调用它。

(.test (CljHelper.) "This is a test")

对于第二个示例,您有一组额外的括号。因此,您正确地调用了方法 test ,但随后您正在获取结果,该结果为空,并尝试将其作为函数调用。所以只需删除括号。

(defn add-id
[x]
(let [c (CljHelper.)]
(.test c x)))

关于java - 在 Clojure 中调用非静态 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62314229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com