code: public static <R> R readOnly(R toReadOnly) {
                  return proxy((p, m, args) -> If((Method) $($.readOnlyToSearch).forEach(s -> {
                          if (m.getName().contains(s))
                                  return BreakWithResult(m);
                          else
                                  return null;
                  }), rm -> {
                          if (rm.isAnnotationPresent(ReadOnly.class))
                                  return m.invoke(toReadOnly, args);
                          else
                                  throw new ModifyReadOnlyException(toReadOnly, m);
                  }).Else(() -> {
                          if (m.isAnnotationPresent(Writable.class))
                                  throw new ModifyReadOnlyException(toReadOnly, m);
                          else
                                  return m.invoke(toReadOnly, args);
                  }), toReadOnly);
          }
docs: Make an object which has interfaces to a read-only one.<br>
  When an invocation comes, the InvocatinHandler will check the method.
  <p>
  <pre>
  if methodName.contains elements in $.readOnlyToSearch
  Check whether the method has ReadOnly annotation
  if has
  do invoking
  else
  throw an exception(ModifyReadOnlyException)
  else
  Check whether the method has Writable annotation
  if has
  throw an exception(ModifyReadOnlyException)
  else
  do invoking
  </pre>
  
  @param toReadOnly the object to be readonly
  @return read-only object(dynamic proxy supported)