static double distance()

in runtime/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/function/DefaultOverloadSelector.java [59:95]


  static double distance(@Nonnull Class<? extends Data> want, @Nonnull Data got) {
    Set<Class<?>> gotClasses = new HashSet<>();
    gotClasses.add(got.getClass());

    if (gotClasses.contains(want) || (want.equals(NullData.class) && got.isNullOrEmpty())) {
      return 0;
    }

    if (got.isArray()) {
      gotClasses.add(Array.class);
    }
    if (got.isContainer()) {
      gotClasses.add(Container.class);
    }
    if (got.isDataset()) {
      gotClasses.add(Dataset.class);
    }
    if (got.isPrimitive()) {
      gotClasses.add(Primitive.class);
    }
    if (Arrays.asList(got.getClass().getInterfaces()).contains(Data.class)) {
      gotClasses.add(Data.class);
    }

    if (want.isInterface() && gotClasses.contains(want)) {
      return 1;
    }
    if (want.isAssignableFrom(got.getClass())) {
      return 2;
    }

    if (got.isClass(WrapperData.class) && got.isClass(want)) {
      return WRAPPER_EPSILON + distance(want, got.asClass(want));
    }

    return Double.POSITIVE_INFINITY;
  }