跳转到内容

学习 Clojure/调用 Java

来自维基教科书,一个开放的世界中的开放书籍
  • (. 实例方法参数*)
  • (. 类方法参数*)

特殊形式 . 也称为 宿主,调用公共 Java 方法或检索公共 Java 字段的值

(. foo bar 7 4)   ; call the method bar of the instance/class foo with arguments 7 and 4
(. alice bob)     ; return the value of public field bob of the instance/class alice

请注意,访问字段可能会被误认为是调用无参数方法:如果一个类具有无参数方法和同名的公共字段,则通过假设调用方法是预期的来解决歧义。

如果 . 的第一个参数是符号,则符号将以特殊方式求值:如果符号解析为当前命名空间中引用的类,则这是对该类的静态方法之一的调用;否则,这是对从符号解析的实例的方法的调用。因此,令人困惑的是,将 . 与未引用的符号一起使用来解析为类,是对该类对象的实例方法的调用,而不是对该类对象所代表的类的静态方法的调用

(. String valueOf \c)   ; invoke the static method String.valueOf(char) with argument 'c'
(def ned String)        ; interned Var mapped to ned now holds the Class of String
(. ned valueOf \c)      ; exception: attempt to call Class.valueOf, which doesn't exist

虽然 . 运算符是访问 java 的通用运算符,但存在更易读的阅读器宏,应优先使用它们而不是直接使用 .

  • (.字段实例参数*)
  • 类/静态字段(类/静态方法参数*)

注意:在 Subversion 修订版 1158 之前,.field 也可用于静态访问。但是,在最近版本的 Clojure 中,(.field 类名) 形式将被视为 类名 是类 java.lang.Class 的相应实例。

因此,上面的示例将写成

(String/valueOf \c)    ; Static method access!
(def ned String)
(.valueOf ned \c)      ; This will fail
(.valueOf String \c)   ; And in recent versions, so will this.

如果有必要操作类对象,例如调用 Class.newInstance 方法,可以执行以下操作

(. (identity String) newInstance "fred")   ; will create a new instance; this will work in all versions of clojure
(.newInstance String "fred")               ; will work only in a recent enough version of clojure. Expands to the above form.
(.newInstance (identity String) "fred")    ; this was required in old versions


  • (new 类参数*)

特殊形式 new 实例化 Java 类,使用提供的参数调用其构造函数

(new Integer 3)    ; instantiate Integer, passing 3 as argument to the constructor

与使用 . 调用静态方法一样,类必须指定为符号,而不是您想要实例化的类的类对象

(new String "yo")   ; new String("yo")
(def ned String)    ; interned Var mapped to ned now holds the Class of String
(new ned "yo")      ; exception: new Class("yo") is invalid

也存在用于 new 的阅读器宏

  • (类名. 参数*)
(String. "yo")      ; equivalent to (new String "yo"). Notice the dot!
Previous page
分支和单子
学习 Clojure Next page
构建 Jars
调用 Java
华夏公益教科书