本文介绍了如何获取在clojure中包含原语的类的构造函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了访问已经键入参数的类的构造函数,我可以这样做:

  (.newInstance(.getConstructor java.util.Date(into-array java.lang.Class []))
(object-array []))
; => #inst2013-04-27T04:00:55.498-00:00

> (.newInstance(.getConstructor java.util.Date(into-array java.lang.Class [java.lang.String]))
(object-array [2013年4月27日]))
; => #inst2013-04-26T14:00:00.000-00:00

java.util.Date 也需要一个 long 作为参数,我想写如下

 > (.newInstance(.getConstructor java.util.Date(into-array java.lang.Class [long]))
(object-array [0]))
/ pre>

如何做到这一点?

解决方案

原语的封装器都有一个静态的 TYPE 字段,可以在这些情况下使用。



你需要...

 (。newInstance 
(.getConstructor java.util.Date
-array java.lang.Class [java.lang.Long / TYPE]))
(object-array [0]))
; => #inst1970-01-01T00:00:00.000-00:00


In order to access the constructor of a class that has typed arguments, I can do:

> (.newInstance (.getConstructor java.util.Date (into-array java.lang.Class []))
          (object-array []))
;=> #inst "2013-04-27T04:00:55.498-00:00"

> (.newInstance (.getConstructor java.util.Date (into-array java.lang.Class [java.lang.String]))
          (object-array ["27 Apr 2013"]))
;=> #inst "2013-04-26T14:00:00.000-00:00"

but java.util.Date also takes a long as an argument and I wish to write something like

> (.newInstance (.getConstructor java.util.Date (into-array java.lang.Class [long]))
          (object-array [0]))

how can this be done?

解决方案

The object wrappers for primitives all have a static TYPE field that can be used in these cases.

So for your specific example you need...

(.newInstance 
  (.getConstructor java.util.Date 
     (into-array java.lang.Class [java.lang.Long/TYPE]))
        (object-array [0]))
;=> #inst "1970-01-01T00:00:00.000-00:00"

这篇关于如何获取在clojure中包含原语的类的构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 11:15