code: public static <T> List<T> getSubClassInstances(Class<T> tClass) {
          return new ArrayList<T>() {
              {
                  addAll(ClassGraphUtil/*TraverseClasspath*/.getSubclassInstances(tClass));
              }
  
              @Override
              public String toString() {
                  StringBuilder stringBuilder = new StringBuilder();
                  for (int i = 0; i < this.size(); i++) {
                      stringBuilder.append(get(i).getClass().getSimpleName()).append(",");
                  }
                  return stringBuilder.toString();
              }
          };
      }
docs: Scan for all subclasses of the given parent class/interface.<br>
  Please pay attention that this method is used by {@link LOG}'s static field initialization and using LOG here could be in danger of class loading deadlock.
  So we cannot use {@link LOG  LOG util class} in this method.
  Note:
  1. We only scan for the default package.
  2. This method is too expensive, it is advised to cache the result.
  
  @return a list of subclass instances or empty array list if no subclass is found.