@Override
    String applicable(Method[] getters) {
      Class targetClass = getTargetClass();
      if (!targetClass.isInterface()) {
        return "not an interface";
      }
      Set<Method> methods = OpenTypeUtil.newSet(Arrays.asList(targetClass.getMethods()));
      methods.removeAll(Arrays.asList(getters));

      String bad = null;
      for (Method m : methods) {
        String mname = m.getName();
        Class[] mparams = m.getParameterTypes();
        try {
          Method om = Object.class.getMethod(mname, mparams);
          if (!Modifier.isPublic(om.getModifiers())) {
            bad = mname;
          }
        } catch (NoSuchMethodException e) {
          bad = mname;
        }

      }
      if (bad != null) {
        return "contains methods other than getters (" + bad + ")";
      }
      return null;
    }
Builder if the target class is an interface and contains no methods other than getters. Then we
can make an instance using a dynamic proxy that forwards the getters to the source
CompositeData
geode-core/src/main/java/org/apache/geode/management/internal/OpenTypeConverter.java