in flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/LegacyUserDefinedFunctionInference.java [335:362]
private static boolean parameterClassEquals(Class<?> candidate, Class<?> expected) {
return candidate == null
|| candidate == expected
|| expected == Object.class
|| candidate == Object.class
|| // Special case when we don't know the type
expected.isPrimitive() && Primitives.wrap(expected) == candidate
|| candidate == Date.class && (expected == Integer.class || expected == int.class)
|| candidate == Time.class && (expected == Integer.class || expected == int.class)
|| candidate == StringData.class && expected == String.class
|| candidate == String.class && expected == StringData.class
|| candidate == TimestampData.class && expected == LocalDateTime.class
|| candidate == Timestamp.class && expected == TimestampData.class
|| candidate == TimestampData.class && expected == Timestamp.class
|| candidate == LocalDateTime.class && expected == TimestampData.class
|| candidate == TimestampData.class && expected == Instant.class
|| candidate == Instant.class && expected == TimestampData.class
|| RowData.class.isAssignableFrom(candidate) && expected == Row.class
|| candidate == Row.class && RowData.class.isAssignableFrom(expected)
|| RowData.class.isAssignableFrom(candidate) && expected == RowData.class
|| candidate == RowData.class && RowData.class.isAssignableFrom(expected)
|| candidate == DecimalData.class && expected == BigDecimal.class
|| candidate == BigDecimal.class && expected == DecimalData.class
|| (candidate.isArray()
&& expected.isArray()
&& candidate.getComponentType() != null
&& expected.getComponentType() == Object.class);
}