title: Android Java objModelClass.getClass().getDeclaredFields() returns "$change" as one field
body: <p>In our project we are using data models to store data received from services. So in a particular case when we are inserting data to database, we use <strong>objModelClass.getClass().getDeclaredFields()</strong> method to get all field names, and it is correctly returning all field names of the class but also returning one extra field with name "$change", which does not exists in the class.</p>
  
  <p>Strange thing is, In android studio there was no such problem but when we upgraded to android studio 2.0 this happened.</p>
  
  <p>Though i have applied a quick fix, but i need to properly fix this.
  I want to know the why is it happening?</p>
  
  <p>This the function using this method</p>
  
  <pre><code>public void insertValuesIntoTable(final String strTableName, ArrayList&lt;Object&gt; alObjClasses,
                                        String strPrimaryKey, String strCompositeKey) {
          try {
              SQLiteDatabase db_w = this.getWritableDatabase();
              ContentValues contentValues = new ContentValues();
              //Iterate through every model class Object in the ArrayList and transfer the contents to the DB
              if (alObjClasses != null)
                  for (Object objModelClass : alObjClasses) {
                      for (Field field : objModelClass.getClass().getDeclaredFields()) {
                          //Encrypt value if encryption is enabled &amp; the column is to be encrypted
                          try {
                              field.setAccessible(true);
                              //Test if the table received is Ignore contacts. Minor Hack inserted
                              //So that the same contact data model can be re used. It checks if the
                              //Table is of ignored constant or not then checks if the column exists
                              //in the table or not as that of the field name. Doing this saves
                              //from receiving a SQLConstraint exception stating, "Column not found"
                              if(field.getName().equals("$change"))
                                  continue;
                              if(strTableName.equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS))
                                  if(!field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_NAMES)
                                          &amp;&amp; !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_NUMBERS)
                                          &amp;&amp; !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_EMAIL)
                                          &amp;&amp; !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_CITY)
                                          &amp;&amp; !field.getName().equalsIgnoreCase(ContactConstants.TABLE_IGNORED_CONTACTS_ID))
                                      continue;
                              contentValues.put(field.getName(),
                                      (Constants.ENCRYPTION_PREFERENCE &amp;&amp; HelperFunctions.isColumnEncrypted(field.getName()))
                                              ? HelperFunctions.encryptString((String) field.get(objModelClass))
                                              : (String) field.get(objModelClass));
                          } catch (IllegalAccessException e) {
                           //   e.printStackTrace();
                              //Never thrown since field.setAccessible(true); is called before accessing data
                          }
                          catch ( ClassCastException e) {
                     //         e.printStackTrace();
                              //Never thrown since field.setAccessible(true); is called before accessing data
                          }
                      }
                      try {
                          if (db_w.insert(strTableName, null, contentValues) == -1)
                              throw new SQLiteConstraintException();
                      } catch (SQLiteConstraintException e) {
                         // e.printStackTrace();
                          Log.i("Error - DB", "Error occurred while trying to add data to "
                                  + strTableName + " Table, updating data instead.");
                          //Since the entry exists in the DB, it will be updated instead
                          updateEntryInDatabase(db_w, strTableName, strPrimaryKey, strCompositeKey, contentValues);
                      }
                  }
              db_w.close();
          } catch (NullPointerException e) {
           //   e.printStackTrace();
              //Is thrown sometimes when the context of the activity which called it is destroyed mid execution
          }
          catch (SQLiteException e) {
           //   e.printStackTrace();
              //Is thrown sometimes when the context of the activity which called it is destroyed mid execution
          }
      }
  </code></pre>