繁体   English   中英

如何确保Clojure变量是正确的Java类型

[英]How to make sure a clojure variable is of the right Java type

Java代码XSSFRow row = sheet.getRow(p);
clojure代码(def row (.getRow sheet p))
我们如何确保该行是XSSFRow类型的?

Clojure是动态类型的,因此var / value的类型在运行时确定。

如果要确保某个值属于某个类,则可以进行以下声明:

(assert (= (class row) XSSFRow))

或者,更简洁一些(感谢opqdonut):

(assert (instance? XSSFRow row))

这不会检查确切的类,但会检查任何超类:

(instance? Object row) ;=> true

注意,有一种方法可以使用元数据为编译器指定类型提示。 在某些形式中,您可以插入以下构造:

(let [^String str-val (do-something)] ...)
(def ^double y)
(defn f [^int int-arg ^"[[I" 2d-int-array] ...)

注意^type表达式。 这是用于指定元数据元素的简写,即元数据映射中的:tag键。 现在,编译器可以优化代码,在知道var的确切类型时直接解决对java方法的调用,而不是现在进行反射。

clojure.org上有一个示例: http : //clojure.org/java_interop#Java%20Interop-Type%20Hints 它表明,我认为是正确的,不要过度使用类型提示,因为它们只会使代码混乱,并且通常不需要适当的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM