次のように、いくつかのタイプヒントを含むレコードを定義するとします。
(defrecord person [name sex ^Integer age city])
person
のクラスまたはインスタンスのいずれかを使用して、実行時にどのタイプヒントが指定されたかを判断する方法はありますperson
か?目的は、フィールドのタイプに応じて、使用されるGUIコンポーネントを変更することです(フィールドの値はnilである可能性があるため、値のタイプを使用してフィールドのタイプを判別することはできません)。
私はいくつかの明白なことを試みましたが、どこにも行きませんでした:
; no metadata on the class, an instance, or the keys or vals of an instance
=> (meta person)
nil
=> (meta (person. "Geoff" "male" 30 "Moon base"))
nil
=> (map meta (keys (person. "Geoff" "male" 30 "Moon base")))
(nil nil nil nil)
=> (map meta (vals (person. "Geoff" "male" 30 "Moon base")))
(nil nil nil nil)
; the field is of type Object
=> (filter (fn [x] (= "age" (.getName x))) (.getFields person))
(#<Field public final java.lang.Object matt.clarity.scratch.person.age>)
; no metadata on the fields of the class
=> (map meta (.getFields person))
(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)