簡體   English   中英

如何在Clojure中轉換Java類?

[英]How can I cast a Java class in Clojure?

我想將一個clojure Java對象(用let *賦值)轉換為另一個Java類類型。 這是可能的,如果可以的話,我該怎么做?

更新:自從我發布這個問題后,我意識到我不需要使用Clojure,因為它沒有接口的概念,而且更像是Ruby duck typing。 如果我需要知道某個對象肯定屬於某種類型,我只需要強制轉換,在這種情況下我得到一個ClassCastException

有一個cast功能做,在clojure.core

user> (doc cast)
-------------------------
clojure.core/cast
([c x])
  Throws a ClassCastException if x is not a c, else returns x.

順便說一句,你不應該直接使用let* - 它只是let后面的一個實現細節(應該在用戶代碼中使用)。

請注意, cast函數實際上只是一種特定類型的斷言。 在clojure中不需要實際的鑄造。 如果你試圖避免反射,那么只需輸入提示:

user=> (set! *warn-on-reflection* true)
true
user=> (.toCharArray "foo")  ; no reflection needed
#<char[] [C@a21d23b>
user=> (defn bar [x]         ; reflection used
         (.toCharArray x))
Reflection warning, NO_SOURCE_PATH:17 - reference to field toCharArray can't be resolved.
#'user/bar
user=> (bar "foo")           ; but it still works, no casts needed!
#<char[] [C@34e93999>
user=> (defn bar [^String x] ; avoid the reflection with type-hint
         (.toCharArray x)) 
#'user/bar
user=> (bar "foo")
#<char[] [C@3b35b1f3>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM