diff --git a/connect/api/src/main/java/org/apache/kafka/connect/data/ConnectSchema.java b/connect/api/src/main/java/org/apache/kafka/connect/data/ConnectSchema.java index 651b2eebff8..5b0579ee30c 100644 --- a/connect/api/src/main/java/org/apache/kafka/connect/data/ConnectSchema.java +++ b/connect/api/src/main/java/org/apache/kafka/connect/data/ConnectSchema.java @@ -93,6 +93,8 @@ public class ConnectSchema implements Schema { // Optional human readable documentation describing this schema. private final String doc; private final Map parameters; + // precomputed hash code. There is no need to re-compute every time hashCode() is called. + private Integer hash = null; /** * Construct a Schema. Most users should not construct schemas manually, preferring {@link SchemaBuilder} instead. @@ -283,20 +285,24 @@ public class ConnectSchema implements Schema { if (o == null || getClass() != o.getClass()) return false; ConnectSchema schema = (ConnectSchema) o; return Objects.equals(optional, schema.optional) && + Objects.equals(version, schema.version) && + Objects.equals(name, schema.name) && + Objects.equals(doc, schema.doc) && Objects.equals(type, schema.type) && Objects.equals(defaultValue, schema.defaultValue) && Objects.equals(fields, schema.fields) && Objects.equals(keySchema, schema.keySchema) && Objects.equals(valueSchema, schema.valueSchema) && - Objects.equals(name, schema.name) && - Objects.equals(version, schema.version) && - Objects.equals(doc, schema.doc) && Objects.equals(parameters, schema.parameters); } @Override public int hashCode() { - return Objects.hash(type, optional, defaultValue, fields, keySchema, valueSchema, name, version, doc, parameters); + if (this.hash == null) { + this.hash = Objects.hash(type, optional, defaultValue, fields, keySchema, valueSchema, name, version, doc, + parameters); + } + return this.hash; } @Override