code: private static void checkTypesCompatibility(final Type actualType,
                                                  final Type knownType,
                                                  final String genericName,
                                                  final Class<?> root,
                                                  final Class<?> known) {
          if (!TypeUtils.isCompatible(actualType, knownType)) {
              throw new IncompatibleTypesException(String.format(
                      "Known generic %s of %s is not compatible with %s hierarchy: %%s when required %%s",
                      genericName, TypeToStringUtils.toStringWithNamedGenerics(known), root.getSimpleName()),
                      knownType, actualType);
          }
      }
docs: Check if known class generic resolved in current root class hierarchy is compatible with known generic value.
  For example, if {@code Root<T extends Integer> extends Base<T>} and we resolve hierarchy for known
  {@code Base<String>} then types are not compatible: for Root hierarchy we have {@code Target<Integer>} which
  is not compatible with {@code String}.
  
  @param actualType  generic type in root class hierarchy
  @param knownType   known generic type
  @param genericName name of generic variable in known class
  @param root        root class (hierarchy resolved for, can be casted to known)
  @param known       class with known generics