docs: private <T extends MDataPo> T getDataPo(Map<String, Object> dataMap, Class<T> clazz,
                                              MNode mNode, Long timestamp) {
          try {
              T data = clazz.newInstance();
              if (CollectionUtils.isNotEmpty(dataMap)) {
                  for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
                      Method method = CACHED_METHOD_MAP.get(clazz.getSimpleName() + "_" + entry.getKey());
                      if (method != null) {
                          String string = String.valueOf(entry.getValue());
                          Object value = entry.getValue();
                          Class<?> parameterType = method.getParameterTypes()[0];
                          if (parameterType == Long.class || parameterType == long.class) {
                              value = Long.valueOf(string);
                          } else if (parameterType == Integer.class || parameterType == int.class) {
                              value = Integer.valueOf(string);
                          } else if (parameterType == Float.class || parameterType == float.class) {
                              value = Float.valueOf(string);
                          } else if (parameterType == Double.class || parameterType == double.class) {
                              value = Double.valueOf(string);
                          } else if (parameterType == Short.class || parameterType == short.class) {
                              value = Short.valueOf(string);
                          } else if (parameterType == Boolean.class || parameterType == boolean.class) {
                              value = Boolean.valueOf(string);
                          } else if (parameterType == String.class) {
                              value = string;
                          }
                          // TODO others
                          method.invoke(data, value);
                      }
                  }
              }
  
              data.setNodeType(mNode.getNodeType());
              data.setNodeGroup(mNode.getNodeGroup());
              data.setIdentity(mNode.getIdentity());
              data.setGmtCreated(SystemClock.now());
              data.setTimestamp(timestamp);
  
              return data;
          } catch (Exception e) {
              throw new IllegalStateException(e);
          }
      }