Две проблемы здесь:
Во-первых, пространство имен com.foo компилируется в класс foo_wh независимо от пакета com; не скомпилировано с классом в пакете com.foo.
См:
user> (ns com.foo)
nil
com.foo>
nil
com.foo> (defn hello[] "hello !")
#'com.foo/hello
com.foo> (class hello)
com.foo$hello
com.foo> (ns com.foo.hello)
nil
com.foo.hello> (defn hi[] "hi !")
#'com.foo.hello/hi
com.foo.hello> (class hi)
com.foo.hello$hi
Во-вторых, при поиске конструкторов или полей компилятор Clojure использует методы getConstructor и getFields из java.lang.Class, которые по спецификации возвращают только публичные конструкторы и открытые поля .
Итак, неудача здесь. Похоже, вы не сможете получить доступ к полям, защищенным пакетами.
Редактировать , отвечая на комментарии. Наилучшим подходом для доступа к полям уровня пакета в унаследованном коде Java было бы написание класса на Java, который обертывает существующий класс и предоставляет доступ к защищенным пакетам методам и полям из этого класса с помощью открытых методов. Таким образом, вы сможете лучше контролировать имя и пакет сгенерированного класса.
Эта оболочка представляет собой небольшой объем кода Java, и оттуда вы можете получить доступ к полям из кода Clojure.