     (enum? (reflect klass))))
 
 (defn set-val [obj reflector prop value]
-  (println "\nSetval:")
   (let [current-value (Reflector/invokeInstanceMethod obj
                                                       (getter-name prop)
                                                       (to-array []))

  (let [cur-val (Reflector/invokeInstanceMethod obj
                                                (getter-name property)
                                                (to-array []))]
    (println "get-nested-object: cur-val = " cur-val)
    (or cur-val
        (let [member-type (:type (fetch-method reflector property))
              _ (println "Nested object member-type = " member-type " class = " (class member-type))
              ;; _ (pprint reflector)
              ]
          (let [;x (construct (resolve-class (.getContextClassLoader (Thread/currentThread)) member-type))
                abc `(new ~member-type)
                _ (println "Going to eval: " abc)
                x (eval abc)]
            x)))))


(declare update-with)

(defmulti instantiate param-type)

(defmethod instantiate :class [cls]
  (let [member-type (symbol (replace-first (str cls) #".* " ""))
        new-obj-statement `(new ~member-type)]
    (eval new-obj-statement)))

(defmethod instantiate :object [x] x)

(defmethod instantiate :enum [x] x)

(defn setter-name [property]
  (let [x (subs property 0 1)
