code: @Override
      public boolean contains(@NonNull String key) {
          if (key == null) { throw new IllegalArgumentException("key cannot be null."); }
  
          synchronized (lock) {
              return !getMValue(internalDict, key).isEmpty();
          }
      }
docs: Tests whether a property exists or not.
  This can be less expensive than getValue(String), because it does not have to allocate an Object for the
  property value.
  
  @param key the key
  @return the boolean value representing whether a property exists or not.