code: public static <T> DataKey<T> create(String name, Class<T> dataClass, boolean allowNull, T defaultValue) {
          if (dataClass.isPrimitive()) {
              throw new IllegalArgumentException("primitives are not supported - please use their corresponding wrappers");
          }
          if (dataClass.isArray()) {
              throw new IllegalArgumentException("arrays are not supported - please use a list with their corresponding wrapper");
          }
          return new DataKey(name, dataClass, allowNull, defaultValue);
      }
docs: creates a data key with the given name, data type, the given permission
  to allow null values and a default value. You can set the default value to
  null to signal that there should be no default value.
  
  @param <T> the type
  @param name the name of the key that is stored in the xdata file
  @param dataClass the type's class
  @param allowNull allow null values?
  @param defaultValue the default value to use when there is no value set for this key.
  If set to null this will be the same as setting no default value.
  @return