Помимо вашей ошибки при сравнении строк (вы должны использовать .equals, а не ==, хотя == часто будет работать.) У вас также есть проблема с выражением field.get (field). Это получит значение из объекта поля, у которого не будет поля с именем varname. Вы, вероятно, хотите field.get (экземпляр). Даже если это исправить, я не совсем уверен, что он будет делать с примитивными значениями - int и boolean - но я полагаю, что они преобразуют их в Integer и Boolean соответственно, если это что-то сделает.
Но давайте вернемся еще дальше. Я сильно подозреваю, что этот подход не является решением вашей проблемы. Если вы планируете получить доступ к этим значениям по имени, то они должны быть на карте, и в этом случае вам не нужно отражать их. Если вы действительно хотите получить доступ к данным обычными методами, а также по имени, вы можете создать методы доступа, которые затем получат / поместят данные в / из карты.