Clojure - Giao diện Java

Như chúng ta đã biết, mã Clojure chạy trên môi trường ảo Java ở phần cuối. Vì vậy, nó chỉ có ý nghĩa rằng Clojure có thể sử dụng tất cả các chức năng từ Java. Trong chương này, chúng ta hãy thảo luận về mối tương quan giữa Clojure và Java.

Gọi các phương thức Java

Các phương thức Java có thể được gọi bằng cách sử dụng ký hiệu dấu chấm. Một ví dụ là chuỗi. Vì tất cả các chuỗi trong Clojure đều là chuỗi Java, bạn có thể gọi các phương thức Java bình thường trên chuỗi.

Một ví dụ về cách thực hiện điều này được hiển thị trong chương trình sau.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (println (.toUpperCase "Hello World")))
(Example)

Chương trình trên tạo ra kết quả sau. Bạn có thể thấy từ mã rằng nếu bạn chỉ gọi ký hiệu dấu chấm cho bất kỳ phương thức chuỗi nào, nó cũng sẽ hoạt động trong Clojure.

Đầu ra

HELLO WORLD

Gọi các phương thức Java với các tham số

Bạn cũng có thể gọi các phương thức Java với các tham số. Một ví dụ về cách thực hiện điều này được hiển thị trong chương trình sau.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (println (.indexOf "Hello World","e")))
(Example)

Chương trình trên tạo ra kết quả sau. Bạn có thể thấy từ đoạn mã trên, rằng chúng tôi đang chuyển tham số “e” cho phương thức indexOf. Chương trình trên tạo ra kết quả sau.

Đầu ra

1

Tạo các đối tượng Java

Các đối tượng có thể được tạo trong Clojure bằng cách sử dụng từ khóa 'mới' tương tự như những gì được thực hiện trong Java.

Một ví dụ về cách thực hiện điều này được hiển thị trong chương trình sau.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (def str1 (new String "Hello"))
   (println str1))
(Example)

Chương trình trên tạo ra kết quả sau. Bạn có thể thấy từ đoạn mã trên, rằng chúng ta có thể sử dụng từ khóa 'mới' để tạo một đối tượng mới từ lớp String hiện có từ Java. Chúng ta có thể truyền giá trị trong khi tạo đối tượng, giống như chúng ta làm trong Java. Chương trình trên tạo ra kết quả sau.

Đầu ra

Hello

Sau đây là một ví dụ khác cho thấy cách chúng ta có thể tạo một đối tượng của lớp Integer và sử dụng chúng trong các lệnh Clojure thông thường.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (def my-int(new Integer 1))
   (println (+ 2 my-int)))
(Example)

Chương trình trên tạo ra kết quả sau.

Đầu ra

3

Nhập lệnh

Chúng ta cũng có thể sử dụng lệnh nhập để đưa các thư viện Java vào không gian tên để các lớp và phương thức có thể được truy cập dễ dàng.

Ví dụ sau đây cho thấy cách chúng ta có thể sử dụng lệnh nhập. Trong ví dụ, chúng tôi đang sử dụng lệnh nhập để nhập các lớp từjava.util.stackthư viện. Sau đó, chúng ta có thể sử dụng phương thức push và pop của lớp ngăn xếp như chúng vốn có.

Thí dụ

(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)

Chương trình trên tạo ra kết quả sau.

Đầu ra

First Element

Chạy mã bằng lệnh Java

Có thể chạy mã Clojure bằng lệnh Java. Sau đây là cú pháp của cách này có thể được thực hiện.

java -jar clojure-1.2.0.jar -i main.clj

Bạn phải đề cập đến tệp jar Clojure, để tất cả các lớp dựa trên Clojure sẽ được tải trong JVM. Tệp 'main.clj' là tệp mã Clojure cần được thực thi.

Các hàm tích hợp trong Java

Clojure có thể sử dụng nhiều hàm có sẵn của Java. Một số trong số họ là -

Math PI function- Clojure có thể sử dụng phương pháp Toán học đến giá trị của PI. Sau đây là một mã ví dụ.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (println (. Math PI)))
(Example)

Đoạn mã trên tạo ra kết quả sau.

Đầu ra

3.141592653589793

System Properties- Clojure cũng có thể truy vấn các thuộc tính của hệ thống. Sau đây là một mã ví dụ.

Thí dụ

(ns Project
   (:gen-class))
(defn Example []
   (println (.. System getProperties (get "java.version"))))
(Example)

Tùy thuộc vào phiên bản Java trên hệ thống, giá trị tương ứng sẽ được hiển thị. Sau đây là một ví dụ đầu ra.

Đầu ra

1.8.0_45