code: public final void setDatas(@NonNull Iterable<? extends Data<?>> datas) {
          checkNotNull(datas, "datas");
          mDatas.clear();
  
          for (Data<?> data : datas) {
              mDatas.add(data);
              // Add entry for each new data instance in our registration map.
              if (!mRegistered.containsKey(data)) {
                  mRegistered.put(data, false);
              }
          }
  
          // Remove and unregister any entries in our registration map that aren't in the new set.
          Iterator<Map.Entry<Data<?>, Boolean>> it = mRegistered.entrySet().iterator();
          while (it.hasNext()) {
              Map.Entry<Data<?>, Boolean> entry = it.next();
              Data<?> data = entry.getKey();
              Boolean registered = entry.getValue();
              if (!mDatas.contains(data) && registered) {
                  data.unregisterDataObserver(mDataObserver);
                  data.unregisterLoadingObserver(mLoadingObserver);
                  data.unregisterErrorObserver(mErrorObserver);
                  it.remove();
              }
          }
  
          updateRegistration();
      }
docs: Assigns data instances, and updates the observer registration state based on {@link #isEnabled()}.
  @param datas The data instances to observe, possibly empty.
  @see #setEnabled(boolean)