Is this what you're looking for?
user=> (resolve 'java.lang.String) java.lang.String user=> (type (resolve 'java.lang.String)) java.lang.Class On Mon, Jun 26, 2017 at 1:34 PM Manas Marthi <manas.mar...@gmail.com> wrote: > Hi, > I have a jar files with more than 200 DTO classes. Some have only > primitive data type values and some have other beans from the same jar. > I am trying to traverse through a class hierarchy to find the field > count. If a class has a mix of some primitive types and other java classes, > then the total field count is to be computed by looking up the field count > from those fields. > > I am having a map of lists. I believe some kind of flat map operation > should be useful here. But I see a need for recursive travel through > hierarchy. So not sure how to proceed. > So I am first trying to solve it imperatively. > However, reflect/reflect does not return Class objects, It is returning > Symbols. So my below filter function is failing. > Pls can you help how to covert symbols into Class objects > > > > (def primitive-types #{ > java.lang.Boolean > java.lang.Character > java.lang.Byte > java.lang.Short > java.lang.Integer > java.lang.Long > java.lang.Float > java.lang.Double > java.lang.String > }) > > ; using hash-maps as I yet don't know how to mutate maps in clojure > (def refcounts-map (java.util.HashMap.)) > (def final-ref-counts-map (java.util.HashMap.)) > > > (defn all-fields-are-of-primitive-type? [fields-list] > (every? #(primitive-types %) fields-list) > ) > > > (defn init-ref-counts-from-class-hierarchy > [types-list] ; A list of class objects > (when-not (empty? types-list) > (let [cur-type (first types-list) > cur-type-data-fields (->> > cur-type > (reflect/reflect ) > (:members) > (filter #(instance? > clojure.reflect.Field %)) > (map #(:type %)) ;<----------------This > is not a sequence of Class objects. It is giving Symbols! > ) > ] > (if (all-fields-are-of-primitive-type? cur-type-data-fields) > ;<------- This is always failing!! > (.put final-ref-counts-map cur-type (count > cur-type-data-fields)) > (.put refcounts-map cur-type [cur-type-data-fields 0]) > ) > (recur (rest types-list)) > ) > ) > ) > > (defn get-reference-counts > [types-list] > (do > (init-ref-counts-from-class-hierarchy types-list) > ;TODO: initiate recursive travel through > )) > > (get-reference-counts (take 2 (vals dto-class-objects))) > (pp/pprint refcounts-map) > (pp/pprint final-ref-counts-map) > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.