- Clojure 教程
- Clojure - 首页
- Clojure - 概述
- Clojure - 环境
- Clojure - 基本语法
- Clojure - REPL
- Clojure - 数据类型
- Clojure - 变量
- Clojure - 运算符
- Clojure - 循环
- Clojure - 决策
- Clojure - 函数
- Clojure - 数字
- Clojure - 递归
- Clojure - 文件 I/O
- Clojure - 字符串
- Clojure - 列表
- Clojure - 集合
- Clojure - 向量
- Clojure - 映射
- Clojure - 命名空间
- Clojure - 异常处理
- Clojure - 序列
- Clojure - 正则表达式
- Clojure - 断言
- Clojure - 解构
- Clojure - 日期和时间
- Clojure - 原子
- Clojure - 元数据
- Clojure - StructMaps
- Clojure - 代理
- Clojure - 观察者
- Clojure - 宏
- Clojure - 参考值
- Clojure - 数据库
- Clojure - Java 接口
- Clojure - 并发编程
- Clojure - 应用
- Clojure - 自动化测试
- Clojure - 库
- Clojure 有用资源
- Clojure - 快速指南
- Clojure - 有用资源
- Clojure - 讨论
Clojure - Java 接口
我们已经知道,Clojure 代码最终运行在 Java 虚拟环境中。因此,Clojure 能够利用 Java 的所有功能也就不足为奇了。在本章中,让我们讨论 Clojure 和 Java 之间的关系。
调用 Java 方法
可以使用点表示法调用 Java 方法。例如字符串。由于 Clojure 中的所有字符串都是 Java 字符串,因此您可以在字符串上调用普通的 Java 方法。
以下程序演示了如何执行此操作。
示例
(ns Project (:gen-class)) (defn Example [] (println (.toUpperCase "Hello World"))) (Example)
上述程序产生以下输出。您可以从代码中看到,如果您只是对任何字符串方法调用点表示法,它在 Clojure 中也能正常工作。
输出
HELLO WORLD
带参数的 Java 方法调用
您还可以调用带有参数的 Java 方法。以下程序演示了如何执行此操作。
示例
(ns Project (:gen-class)) (defn Example [] (println (.indexOf "Hello World","e"))) (Example)
上述程序产生以下输出。您可以从上面的代码中看到,我们正在将参数“e”传递给 indexOf 方法。上述程序产生以下输出。
输出
1
创建 Java 对象
与 Java 中的操作类似,可以使用“new”关键字在 Clojure 中创建对象。
以下程序演示了如何执行此操作。
示例
(ns Project (:gen-class)) (defn Example [] (def str1 (new String "Hello")) (println str1)) (Example)
上述程序产生以下输出。您可以从上面的代码中看到,我们可以使用“new”关键字从 Java 中现有的 String 类创建一个新对象。我们可以在创建对象时传递值,就像我们在 Java 中所做的那样。上述程序产生以下输出。
输出
Hello
以下是另一个示例,它展示了如何创建 Integer 类的对象并在普通的 Clojure 命令中使用它们。
示例
(ns Project (:gen-class)) (defn Example [] (def my-int(new Integer 1)) (println (+ 2 my-int))) (Example)
上述程序产生以下输出。
输出
3
导入命令
我们还可以使用 import 命令将 Java 库包含到命名空间中,以便可以轻松访问类和方法。
以下示例展示了如何使用 import 命令。在示例中,我们使用 import 命令从java.util.stack库导入类。然后,我们可以像使用它们一样使用 stack 类的 push 和 pop 方法。
示例
(ns Project (:gen-class)) (import java.util.Stack) (defn Example [] (let [stack (Stack.)] (.push stack "First Element") (.push stack "Second Element") (println (first stack)))) (Example)
上述程序产生以下输出。
输出
First Element
使用 Java 命令运行代码
可以使用 Java 命令运行 Clojure 代码。以下是执行此操作的语法。
java -jar clojure-1.2.0.jar -i main.clj
您必须提及 Clojure jar 文件,以便所有基于 Clojure 的类都加载到 JVM 中。“main.clj”文件是要执行的 Clojure 代码文件。
Java 内置函数
Clojure 可以使用许多 Java 的内置函数。其中一些包括:
Math PI 函数 - Clojure 可以使用 Math 方法获取 PI 的值。以下是一个示例代码。
示例
(ns Project (:gen-class)) (defn Example [] (println (. Math PI))) (Example)
以上代码产生以下输出。
输出
3.141592653589793
系统属性 - Clojure 还可以查询系统属性。以下是一个示例代码。
示例
(ns Project (:gen-class)) (defn Example [] (println (.. System getProperties (get "java.version")))) (Example)
根据系统上 Java 的版本,将显示相应的值。以下是一个示例输出。
输出
1.8.0_45