在Clojure中,如何读取Java类实例的公共成员变量?我想要的东西:
(. instance publicMemberName)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
instance/publicMemberName
Run Code Online (Sandbox Code Playgroud)
但这只适用于静态方法
Ray*_*oal 12
在Java中,该类java.awt.Point具有公共字段x和y.查看javadoc这里http://download.oracle.com/javase/6/docs/api/java/awt/Point.html.
在Clojure中,点宏适用于字段和方法.这对我有用:
user=> (let [p (new java.awt.Point 2 4)] (.x p))
2
Run Code Online (Sandbox Code Playgroud)
编辑:以下也适用(注意点和p之间的空格):
user=> (let [p (new java.awt.Point 2 4)] (. p x))
2
Run Code Online (Sandbox Code Playgroud)
编辑:我决定做一个完整的例子,因为java.awt.Point有方法getX,getY除了公共领域x和y.所以这里.首先创建一个这样的Java类:
public class C {
public int x = 100;
}
Run Code Online (Sandbox Code Playgroud)
编译它
$ javac C.java
Run Code Online (Sandbox Code Playgroud)
现在C.class进入你的clojure目录.接下来启动REPL,导入类,并观察它的工作原理:
$ java -cp clojure.jar clojure.main
Clojure 1.2.0
user=> (import C)
C
user=> (let [q (new C)] (. q x))
100
Run Code Online (Sandbox Code Playgroud)
注意另一种方式也适用:
user=> (let [q (new C)] (.x q))
100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1784 次 |
| 最近记录: |