This is an automated email from the ASF dual-hosted git repository.

damccorm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new d16f5d18d2a [ErrorProne]  Fix EqualsGetClass warnings and enable Error 
Prone check (#37758)
d16f5d18d2a is described below

commit d16f5d18d2a5dc7828c4cc788eee023ff90632cb
Author: RadosÅ‚aw Stankiewicz <[email protected]>
AuthorDate: Fri Mar 20 18:16:17 2026 +0100

    [ErrorProne]  Fix EqualsGetClass warnings and enable Error Prone check 
(#37758)
    
    * addressed all EqualsGetClass warnings
    
    * Fix GetterBasedSchemaProvider.equals
    
    * supress equalsGetClass in ProtoCoder and DynamicProtoCoder.
---
 .../org/apache/beam/gradle/BeamModulePlugin.groovy |  1 -
 .../IcebergRestCatalogStreamingWriteExample.java   |  2 +-
 .../beam/examples/complete/TrafficRoutes.java      |  2 +-
 .../beam/examples/complete/game/UserScore.java     |  2 +-
 .../ReadFromTwitterDoFn.java                       |  2 +-
 .../twitterstreamgenerator/TwitterConfig.java      |  2 +-
 .../construction/SerializablePipelineOptions.java  |  2 +-
 .../beam/runners/core/metrics/BoundedTrieData.java |  4 +--
 .../runners/flink/FlinkExecutionEnvironments.java  |  2 +-
 .../translation/types/CoderTypeInformation.java    |  2 +-
 .../state/FlinkBroadcastStateInternals.java        |  8 ++---
 .../streaming/state/FlinkStateInternals.java       | 16 ++++-----
 .../runners/flink/FlinkExecutionEnvironments.java  |  2 +-
 .../translation/types/CoderTypeInformation.java    |  2 +-
 .../translation/types/CoderTypeSerializer.java     |  2 +-
 .../state/FlinkBroadcastStateInternals.java        |  8 ++---
 .../streaming/state/FlinkStateInternals.java       | 16 ++++-----
 .../dataflow/PrimitiveParDoSingleFactoryTest.java  |  2 +-
 .../runners/dataflow/util/CloudObjectsTest.java    |  4 +--
 ...renceCountingExecutableStageContextFactory.java |  2 +-
 .../java/org/apache/beam/runners/jet/Utils.java    |  2 +-
 .../beam/runners/samza/runtime/KeyedTimerData.java |  2 +-
 .../beam/runners/samza/runtime/OpMessage.java      |  2 +-
 .../samza/runtime/SamzaStoreStateInternals.java    |  4 +--
 .../translation/helpers/EncoderHelpersTest.java    |  2 +-
 .../spark/stateful/SparkStateInternals.java        |  2 +-
 .../apache/beam/runners/spark/util/ByteArray.java  |  2 +-
 .../beam/runners/spark/util/SideInputStorage.java  |  2 +-
 .../org/apache/beam/sdk/coders/AtomicCoder.java    |  1 +
 .../org/apache/beam/sdk/coders/DelegateCoder.java  |  1 +
 .../java/org/apache/beam/sdk/coders/RowCoder.java  |  1 +
 .../apache/beam/sdk/coders/SerializableCoder.java  |  1 +
 .../beam/sdk/coders/StringDelegateCoder.java       |  1 +
 .../apache/beam/sdk/coders/StructuredCoder.java    |  1 +
 .../java/org/apache/beam/sdk/coders/ZstdCoder.java |  2 +-
 .../main/java/org/apache/beam/sdk/io/FileIO.java   |  2 +-
 .../org/apache/beam/sdk/io/range/OffsetRange.java  |  2 +-
 .../beam/sdk/options/ProxyInvocationHandler.java   |  1 +
 .../apache/beam/sdk/schemas/CachingFactory.java    |  2 +-
 .../beam/sdk/schemas/FromRowUsingCreator.java      |  2 +-
 .../sdk/schemas/GetterBasedSchemaProvider.java     |  3 +-
 .../apache/beam/sdk/schemas/JavaBeanSchema.java    |  6 ++--
 .../java/org/apache/beam/sdk/schemas/Schema.java   |  6 ++--
 .../org/apache/beam/sdk/schemas/SchemaCoder.java   |  2 +-
 .../sdk/schemas/logicaltypes/EnumerationType.java  |  2 +-
 .../beam/sdk/schemas/logicaltypes/OneOfType.java   |  2 +-
 .../beam/sdk/schemas/utils/ByteBuddyUtils.java     |  2 +-
 .../java/org/apache/beam/sdk/testing/PAssert.java  |  2 +-
 .../beam/sdk/transforms/ApproximateUnique.java     |  2 +-
 .../org/apache/beam/sdk/transforms/CombineFns.java |  2 +-
 .../java/org/apache/beam/sdk/transforms/Count.java |  2 +-
 .../beam/sdk/transforms/PeriodicSequence.java      |  2 +-
 .../java/org/apache/beam/sdk/transforms/Sum.java   |  6 ++--
 .../beam/sdk/transforms/join/RawUnionValue.java    |  2 +-
 .../sdk/util/construction/PTransformMatchers.java  |  2 +-
 .../beam/sdk/coders/SerializableCoderTest.java     |  4 +--
 .../coders/TimestampPrefixingWindowCoderTest.java  |  2 +-
 .../sdk/options/PipelineOptionsFactoryTest.java    |  2 +-
 .../sdk/options/ProxyInvocationHandlerTest.java    |  7 ++--
 .../apache/beam/sdk/schemas/SchemaCoderTest.java   |  4 +--
 .../beam/sdk/schemas/transforms/CoGroupTest.java   |  2 +-
 .../beam/sdk/schemas/transforms/ConvertTest.java   |  8 ++---
 .../beam/sdk/schemas/utils/JsonUtilsTest.java      |  6 ++--
 .../beam/sdk/schemas/utils/TestJavaBeans.java      | 36 +++++++++----------
 .../apache/beam/sdk/schemas/utils/TestPOJOs.java   | 40 +++++++++++-----------
 .../apache/beam/sdk/transforms/CombineFnsTest.java |  2 +-
 .../beam/sdk/transforms/windowing/WindowTest.java  |  2 +-
 .../util/construction/CombineTranslationTest.java  |  2 +-
 .../sdk/util/construction/ReadTranslationTest.java |  4 +--
 .../construction/WindowIntoTranslationTest.java    |  2 +-
 .../WindowingStrategyTranslationTest.java          |  4 +--
 .../graph/ProjectionPushdownOptimizerTest.java     |  4 +--
 .../beam/sdk/extensions/avro/coders/AvroCoder.java |  4 +--
 .../sdk/extensions/avro/io/AvroDatumFactory.java   |  2 +-
 .../extensions/avro/schemas/utils/AvroUtils.java   |  4 +--
 .../sdk/extensions/avro/coders/AvroCoderTest.java  |  2 +-
 .../extensions/avro/schemas/SchemaCoderTest.java   |  2 +-
 .../avro/schemas/transforms/ConvertTest.java       |  4 +--
 .../sdk/extensions/gcp/util/gcsfs/GcsPath.java     |  2 +-
 .../extensions/jackson/JacksonTransformsTest.java  |  2 +-
 .../apache/beam/sdk/extensions/kryo/KryoCoder.java |  2 +-
 .../beam/sdk/extensions/kryo/KryoCoderTest.java    |  4 +--
 .../ordered/OrderedProcessingStatus.java           |  2 +-
 .../sdk/extensions/protobuf/DynamicProtoCoder.java |  1 +
 .../beam/sdk/extensions/protobuf/ProtoCoder.java   |  1 +
 .../sdk/extensions/sql/example/model/Customer.java |  2 +-
 .../sdk/extensions/sql/example/model/Order.java    |  2 +-
 .../provider/bigquery/BeamSqlUnparseContext.java   |  2 +-
 .../extensions/sql/InferredJavaBeanSqlTest.java    |  4 +--
 .../beam/fn/harness/state/FnApiStateAccessor.java  |  2 +-
 .../apache/beam/sdk/io/aws2/common/ObjectPool.java |  2 +-
 .../beam/sdk/io/aws2/kinesis/ShardCheckpoint.java  |  2 +-
 .../beam/sdk/io/aws2/kinesis/StartingPoint.java    |  2 +-
 .../sdk/io/aws2/schemas/AwsSchemaProvider.java     |  2 +-
 .../beam/sdk/io/aws2/sqs/SqsCheckpointMark.java    |  2 +-
 .../sdk/io/aws2/dynamodb/DynamoDBIOWriteTest.java  |  2 +-
 .../aws2/kinesis/EFOShardSubscribersPoolTest.java  |  2 +-
 .../beam/sdk/io/cassandra/CassandraIOTest.java     |  8 ++---
 .../org/apache/beam/sdk/io/common/HashingFn.java   |  2 +-
 .../sdk/io/fileschematransform/XmlRowAdapter.java  |  2 +-
 .../sdk/io/fileschematransform/XmlRowValue.java    |  2 +-
 .../sdk/io/gcp/bigquery/BigQueryInsertError.java   |  2 +-
 .../gcp/bigquery/BigQueryStorageStreamSource.java  |  2 +-
 .../io/gcp/bigquery/PassThroughThenCleanup.java    |  3 +-
 .../bigquery/StorageApiFlushAndFinalizeDoFn.java   |  2 +-
 .../sdk/io/gcp/healthcare/FhirSearchParameter.java |  2 +-
 .../beam/sdk/io/gcp/pubsub/PubsubClient.java       |  6 ++--
 .../cloud/spanner/FakeBatchTransactionId.java      |  2 +-
 .../sdk/io/gcp/bigquery/BigQueryIOReadTest.java    |  2 +-
 ...StreamOrderedByTimestampAndTransactionIdIT.java |  2 +-
 ...nnerChangeStreamOrderedWithinKeyGloballyIT.java |  2 +-
 .../it/SpannerChangeStreamOrderedWithinKeyIT.java  |  2 +-
 ...SpannerChangeStreamTransactionBoundariesIT.java |  2 +-
 .../apache/beam/sdk/io/hadoop/format/Employee.java |  2 +-
 .../java/org/apache/beam/sdk/io/hbase/HBaseIO.java |  6 ++--
 .../beam/sdk/io/iceberg/SerializableDataFile.java  |  2 +-
 .../apache/beam/sdk/io/jdbc/JdbcTestHelper.java    |  2 +-
 .../apache/beam/sdk/io/jms/JmsCheckpointMark.java  |  2 +-
 .../org/apache/beam/sdk/io/redis/RedisCursor.java  |  2 +-
 .../apache/beam/io/requestresponse/CallTest.java   |  4 +--
 ...entialsBasicAuthJcsmpSessionServiceFactory.java |  2 +-
 .../beam/sdk/nexmark/NexmarkConfiguration.java     |  5 +--
 .../org/apache/beam/sdk/nexmark/model/Auction.java |  2 +-
 .../apache/beam/sdk/nexmark/model/AuctionBid.java  |  2 +-
 .../beam/sdk/nexmark/model/AuctionCount.java       |  2 +-
 .../beam/sdk/nexmark/model/AuctionPrice.java       |  2 +-
 .../org/apache/beam/sdk/nexmark/model/Bid.java     |  2 +-
 .../beam/sdk/nexmark/model/BidsPerSession.java     |  2 +-
 .../beam/sdk/nexmark/model/CategoryPrice.java      |  2 +-
 .../org/apache/beam/sdk/nexmark/model/Done.java    |  2 +-
 .../org/apache/beam/sdk/nexmark/model/Event.java   |  2 +-
 .../beam/sdk/nexmark/model/IdNameReserve.java      |  2 +-
 .../beam/sdk/nexmark/model/NameCityStateId.java    |  2 +-
 .../org/apache/beam/sdk/nexmark/model/Person.java  |  2 +-
 .../apache/beam/sdk/nexmark/model/SellerPrice.java |  2 +-
 .../apache/beam/sdk/nexmark/queries/Query5.java    |  2 +-
 .../beam/sdk/nexmark/queries/WinningBids.java      |  4 +--
 .../sdk/nexmark/sources/generator/Generator.java   |  2 +-
 138 files changed, 229 insertions(+), 225 deletions(-)

diff --git 
a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy 
b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
index d2c8c324547..f52105b786b 100644
--- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
@@ -1538,7 +1538,6 @@ class BeamModulePlugin implements Plugin<Project> {
             "ComparableType",
             "DoNotMockAutoValue",
             "EmptyBlockTag",
-            "EqualsGetClass",
             "EqualsUnsafeCast",
             "EscapedEntity",
             "ExtendsAutoValue",
diff --git 
a/examples/java/iceberg/src/main/java/org/apache/beam/examples/iceberg/IcebergRestCatalogStreamingWriteExample.java
 
b/examples/java/iceberg/src/main/java/org/apache/beam/examples/iceberg/IcebergRestCatalogStreamingWriteExample.java
index 0ea73cdf0c8..4d434a81a7f 100644
--- 
a/examples/java/iceberg/src/main/java/org/apache/beam/examples/iceberg/IcebergRestCatalogStreamingWriteExample.java
+++ 
b/examples/java/iceberg/src/main/java/org/apache/beam/examples/iceberg/IcebergRestCatalogStreamingWriteExample.java
@@ -211,7 +211,7 @@ public class IcebergRestCatalogStreamingWriteExample {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Accum)) {
         return false;
       }
       Accum accum = (Accum) o;
diff --git 
a/examples/java/src/main/java/org/apache/beam/examples/complete/TrafficRoutes.java
 
b/examples/java/src/main/java/org/apache/beam/examples/complete/TrafficRoutes.java
index f28cd2d3e6a..95841562686 100644
--- 
a/examples/java/src/main/java/org/apache/beam/examples/complete/TrafficRoutes.java
+++ 
b/examples/java/src/main/java/org/apache/beam/examples/complete/TrafficRoutes.java
@@ -140,7 +140,7 @@ public class TrafficRoutes {
       if (object == null) {
         return false;
       }
-      if (object.getClass() != getClass()) {
+      if (!(object instanceof StationSpeed)) {
         return false;
       }
       StationSpeed otherStationSpeed = (StationSpeed) object;
diff --git 
a/examples/java/src/main/java/org/apache/beam/examples/complete/game/UserScore.java
 
b/examples/java/src/main/java/org/apache/beam/examples/complete/game/UserScore.java
index 8baa82cad8d..8d3684cc443 100644
--- 
a/examples/java/src/main/java/org/apache/beam/examples/complete/game/UserScore.java
+++ 
b/examples/java/src/main/java/org/apache/beam/examples/complete/game/UserScore.java
@@ -121,7 +121,7 @@ public class UserScore {
       if (this == o) {
         return true;
       }
-      if (o == null || o.getClass() != this.getClass()) {
+      if (!(o instanceof GameActionInfo)) {
         return false;
       }
 
diff --git 
a/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/ReadFromTwitterDoFn.java
 
b/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/ReadFromTwitterDoFn.java
index 64852bac81a..defb4383036 100644
--- 
a/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/ReadFromTwitterDoFn.java
+++ 
b/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/ReadFromTwitterDoFn.java
@@ -64,7 +64,7 @@ final class ReadFromTwitterDoFn extends DoFn<TwitterConfig, 
String> {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof OffsetHolder)) {
         return false;
       }
       OffsetHolder that = (OffsetHolder) o;
diff --git 
a/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/TwitterConfig.java
 
b/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/TwitterConfig.java
index 2a3fe3db766..ebcdef2b09b 100644
--- 
a/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/TwitterConfig.java
+++ 
b/examples/java/twitter/src/main/java/org/apache/beam/examples/twitterstreamgenerator/TwitterConfig.java
@@ -53,7 +53,7 @@ public class TwitterConfig implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof TwitterConfig)) {
       return false;
     }
     TwitterConfig that = (TwitterConfig) o;
diff --git 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
index e2a1257cbaa..6568099c120 100644
--- 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
+++ 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/construction/SerializablePipelineOptions.java
@@ -89,7 +89,7 @@ public class SerializablePipelineOptions implements 
Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof SerializablePipelineOptions)) {
       return false;
     }
     SerializablePipelineOptions that = (SerializablePipelineOptions) o;
diff --git 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
index a9440d1a2e6..cf63713a52e 100644
--- 
a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
+++ 
b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/BoundedTrieData.java
@@ -286,7 +286,7 @@ public class BoundedTrieData implements Serializable {
     if (this == other) {
       return true;
     }
-    if (other == null || this.getClass() != other.getClass()) {
+    if (!(other instanceof BoundedTrieData)) {
       return false;
     }
     BoundedTrieData that = (BoundedTrieData) other;
@@ -590,7 +590,7 @@ public class BoundedTrieData implements Serializable {
       if (this == other) {
         return true;
       }
-      if (other == null || getClass() != other.getClass()) {
+      if (!(other instanceof BoundedTrieNode)) {
         return false;
       }
       BoundedTrieNode that = (BoundedTrieNode) other;
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
index 8b3b2ed9c96..7139a7d1634 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
@@ -309,7 +309,7 @@ public class FlinkExecutionEnvironments {
 
     @Override
     public boolean equals(Object obj) {
-      if (obj == null || this.getClass() != obj.getClass()) {
+      if (!(obj instanceof GlobalJobParametersImpl)) {
         return false;
       }
 
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
index 12e74a64faa..360c6c24902 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
@@ -110,7 +110,7 @@ public class CoderTypeInformation<T> extends 
TypeInformation<T> implements Atomi
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof CoderTypeInformation)) {
       return false;
     }
 
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
index 4bec4c59f9d..280e20f5401 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
@@ -339,7 +339,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof 
FlinkBroadcastStateInternals.FlinkBroadcastValueState)) {
         return false;
       }
 
@@ -430,7 +430,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBroadcastStateInternals.FlinkBroadcastBagState)) 
{
         return false;
       }
 
@@ -545,7 +545,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBroadcastStateInternals.FlinkCombiningState)) {
         return false;
       }
 
@@ -677,7 +677,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof 
FlinkBroadcastStateInternals.FlinkCombiningStateWithContext)) {
         return false;
       }
 
diff --git 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
index 501207b32e9..de3d9419ed1 100644
--- 
a/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
+++ 
b/runners/flink/2.0/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
@@ -134,7 +134,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof StateAndNamespaceDescriptor<?>)) {
         return false;
       }
       StateAndNamespaceDescriptor<?> other = (StateAndNamespaceDescriptor<?>) 
o;
@@ -580,7 +580,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkValueState<?>)) {
         return false;
       }
 
@@ -840,7 +840,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBagState<?>)) {
         return false;
       }
 
@@ -1002,7 +1002,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkCombiningState<?, ?, ?, ?>)) {
         return false;
       }
 
@@ -1167,7 +1167,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkCombiningStateWithContext<?, ?, ?, ?>)) {
         return false;
       }
 
@@ -1289,7 +1289,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkStateInternals.FlinkWatermarkHoldState)) {
         return false;
       }
 
@@ -1511,7 +1511,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkMapState<?, ?>)) {
         return false;
       }
 
@@ -1660,7 +1660,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkSetState<?>)) {
         return false;
       }
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
index 014b1f95fc9..a0e5908cc99 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkExecutionEnvironments.java
@@ -336,7 +336,7 @@ public class FlinkExecutionEnvironments {
 
     @Override
     public boolean equals(Object obj) {
-      if (obj == null || this.getClass() != obj.getClass()) {
+      if (!(obj instanceof GlobalJobParametersImpl)) {
         return false;
       }
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
index 9f4da7cea8e..99e307305d3 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeInformation.java
@@ -109,7 +109,7 @@ public class CoderTypeInformation<T> extends 
TypeInformation<T> implements Atomi
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof CoderTypeInformation)) {
       return false;
     }
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeSerializer.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeSerializer.java
index 30dde7ace39..69036ff0453 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeSerializer.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeSerializer.java
@@ -137,7 +137,7 @@ public class CoderTypeSerializer<T> extends 
TypeSerializer<T> {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof CoderTypeSerializer)) {
       return false;
     }
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
index da876823a44..3c6e3ead8ce 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkBroadcastStateInternals.java
@@ -339,7 +339,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof 
FlinkBroadcastStateInternals.FlinkBroadcastValueState)) {
         return false;
       }
 
@@ -430,7 +430,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBroadcastStateInternals.FlinkBroadcastBagState)) 
{
         return false;
       }
 
@@ -545,7 +545,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBroadcastStateInternals.FlinkCombiningState)) {
         return false;
       }
 
@@ -677,7 +677,7 @@ public class FlinkBroadcastStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof 
FlinkBroadcastStateInternals.FlinkCombiningStateWithContext)) {
         return false;
       }
 
diff --git 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
index 47390428d4b..de244c1c8a3 100644
--- 
a/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
+++ 
b/runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/state/FlinkStateInternals.java
@@ -134,7 +134,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof StateAndNamespaceDescriptor<?>)) {
         return false;
       }
       StateAndNamespaceDescriptor<?> other = (StateAndNamespaceDescriptor<?>) 
o;
@@ -580,7 +580,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkValueState<?>)) {
         return false;
       }
 
@@ -840,7 +840,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkBagState<?>)) {
         return false;
       }
 
@@ -1002,7 +1002,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkCombiningState<?, ?, ?, ?>)) {
         return false;
       }
 
@@ -1167,7 +1167,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkCombiningStateWithContext<?, ?, ?, ?>)) {
         return false;
       }
 
@@ -1289,7 +1289,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkStateInternals.FlinkWatermarkHoldState)) {
         return false;
       }
 
@@ -1511,7 +1511,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkMapState<?, ?>)) {
         return false;
       }
 
@@ -1660,7 +1660,7 @@ public class FlinkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FlinkSetState<?>)) {
         return false;
       }
 
diff --git 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/PrimitiveParDoSingleFactoryTest.java
 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/PrimitiveParDoSingleFactoryTest.java
index d9736fcbe31..b4a353bb719 100644
--- 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/PrimitiveParDoSingleFactoryTest.java
+++ 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/PrimitiveParDoSingleFactoryTest.java
@@ -156,7 +156,7 @@ public class PrimitiveParDoSingleFactoryTest implements 
Serializable {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(getClass());
+      return other instanceof ToLongFn;
     }
 
     @Override
diff --git 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/util/CloudObjectsTest.java
 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/util/CloudObjectsTest.java
index 66e957fbd74..32a9b154f33 100644
--- 
a/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/util/CloudObjectsTest.java
+++ 
b/runners/google-cloud-dataflow-java/src/test/java/org/apache/beam/runners/dataflow/util/CloudObjectsTest.java
@@ -276,7 +276,7 @@ public class CloudObjectsTest {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && getClass().equals(other.getClass());
+      return other instanceof ObjectCoder;
     }
 
     @Override
@@ -321,7 +321,7 @@ public class CloudObjectsTest {
       if (this == o) {
         return true;
       }
-      return o != null && getClass() == o.getClass();
+      return o instanceof RowIdentity;
     }
   }
 }
diff --git 
a/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/ReferenceCountingExecutableStageContextFactory.java
 
b/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/ReferenceCountingExecutableStageContextFactory.java
index 4bee41a630b..4aa770e53e8 100644
--- 
a/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/ReferenceCountingExecutableStageContextFactory.java
+++ 
b/runners/java-fn-execution/src/main/java/org/apache/beam/runners/fnexecution/control/ReferenceCountingExecutableStageContextFactory.java
@@ -224,7 +224,7 @@ public class ReferenceCountingExecutableStageContextFactory
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof WrappedContext)) {
         return false;
       }
       WrappedContext that = (WrappedContext) o;
diff --git a/runners/jet/src/main/java/org/apache/beam/runners/jet/Utils.java 
b/runners/jet/src/main/java/org/apache/beam/runners/jet/Utils.java
index 55b79d70e20..b46ec53d0c4 100644
--- a/runners/jet/src/main/java/org/apache/beam/runners/jet/Utils.java
+++ b/runners/jet/src/main/java/org/apache/beam/runners/jet/Utils.java
@@ -280,7 +280,7 @@ public class Utils {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ByteArrayKey)) {
         return false;
       }
       ByteArrayKey that = (ByteArrayKey) o;
diff --git 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/KeyedTimerData.java
 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/KeyedTimerData.java
index 5eeefeaa0bd..bd7c62dbb32 100644
--- 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/KeyedTimerData.java
+++ 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/KeyedTimerData.java
@@ -121,7 +121,7 @@ public class KeyedTimerData<K> implements 
Comparable<KeyedTimerData<K>> {
       return true;
     }
 
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof KeyedTimerData)) {
       return false;
     }
 
diff --git 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/OpMessage.java
 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/OpMessage.java
index 217785f19b2..33b221a8bbc 100644
--- 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/OpMessage.java
+++ 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/OpMessage.java
@@ -112,7 +112,7 @@ public class OpMessage<T> {
       return true;
     }
 
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof OpMessage<?>)) {
       return false;
     }
 
diff --git 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/SamzaStoreStateInternals.java
 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/SamzaStoreStateInternals.java
index e4ea4794b94..f8530936789 100644
--- 
a/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/SamzaStoreStateInternals.java
+++ 
b/runners/samza/src/main/java/org/apache/beam/runners/samza/runtime/SamzaStoreStateInternals.java
@@ -392,7 +392,7 @@ public class SamzaStoreStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SamzaStoreStateInternals.AbstractSamzaState)) {
         return false;
       }
 
@@ -1016,7 +1016,7 @@ public class SamzaStoreStateInternals<K> implements 
StateInternals {
 
     @Override
     public boolean equals(@Nullable Object o) {
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ByteArray)) {
         return false;
       }
       ByteArray byteArray = (ByteArray) o;
diff --git 
a/runners/spark/3/src/test/java/org/apache/beam/runners/spark/structuredstreaming/translation/helpers/EncoderHelpersTest.java
 
b/runners/spark/3/src/test/java/org/apache/beam/runners/spark/structuredstreaming/translation/helpers/EncoderHelpersTest.java
index 11c47ad03cb..08e2ee5b19e 100644
--- 
a/runners/spark/3/src/test/java/org/apache/beam/runners/spark/structuredstreaming/translation/helpers/EncoderHelpersTest.java
+++ 
b/runners/spark/3/src/test/java/org/apache/beam/runners/spark/structuredstreaming/translation/helpers/EncoderHelpersTest.java
@@ -276,7 +276,7 @@ public class EncoderHelpersTest {
 
     @Override
     public boolean equals(Object o) {
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PrivateString)) {
         return false;
       }
       PrivateString that = (PrivateString) o;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/stateful/SparkStateInternals.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/stateful/SparkStateInternals.java
index 77ae042d81f..51ceb4c8730 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/stateful/SparkStateInternals.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/stateful/SparkStateInternals.java
@@ -212,7 +212,7 @@ public class SparkStateInternals<K> implements 
StateInternals {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof AbstractState)) {
         return false;
       }
       @SuppressWarnings("unchecked")
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/util/ByteArray.java 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/util/ByteArray.java
index a7ff4b8fcd2..24ed97f4469 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/util/ByteArray.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/util/ByteArray.java
@@ -37,7 +37,7 @@ public class ByteArray implements Serializable, 
Comparable<ByteArray> {
 
   @Override
   public boolean equals(@Nullable Object o) {
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof ByteArray)) {
       return false;
     }
     ByteArray byteArray = (ByteArray) o;
diff --git 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/util/SideInputStorage.java
 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/util/SideInputStorage.java
index 9753197f6fa..294f7cdb22d 100644
--- 
a/runners/spark/src/main/java/org/apache/beam/runners/spark/util/SideInputStorage.java
+++ 
b/runners/spark/src/main/java/org/apache/beam/runners/spark/util/SideInputStorage.java
@@ -63,7 +63,7 @@ class SideInputStorage {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Key)) {
         return false;
       }
       Key<?> key = (Key<?>) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AtomicCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AtomicCoder.java
index 72da476afd2..dd87d38750b 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AtomicCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AtomicCoder.java
@@ -69,6 +69,7 @@ public abstract class AtomicCoder<T> extends 
StructuredCoder<T> {
    * @return true if the other object has the same class as this {@link 
AtomicCoder}.
    */
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public final boolean equals(@Nullable Object other) {
     return other != null && this.getClass().equals(other.getClass());
   }
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DelegateCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DelegateCoder.java
index a855934d014..be27588292a 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DelegateCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DelegateCoder.java
@@ -122,6 +122,7 @@ public final class DelegateCoder<T, IntermediateT> extends 
CustomCoder<T> {
   }
 
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object o) {
     if (o == null || this.getClass() != o.getClass()) {
       return false;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/RowCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/RowCoder.java
index 8fa46dbbd25..a8ff3b397fc 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/RowCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/RowCoder.java
@@ -53,6 +53,7 @@ public class RowCoder extends SchemaCoder<Row> {
   }
 
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object o) {
     if (this == o) {
       return true;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
index 08c223e3de8..9b2f9c8d74c 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/SerializableCoder.java
@@ -215,6 +215,7 @@ public class SerializableCoder<T extends Serializable> 
extends CustomCoder<T> {
   }
 
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object other) {
     return !(other == null || getClass() != other.getClass())
         && type == ((SerializableCoder<?>) other).type;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringDelegateCoder.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringDelegateCoder.java
index cadbd9e65e1..a0e13f493f2 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringDelegateCoder.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringDelegateCoder.java
@@ -70,6 +70,7 @@ public final class StringDelegateCoder<T> extends 
CustomCoder<T> {
   }
 
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object o) {
     if (o == null || this.getClass() != o.getClass()) {
       return false;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StructuredCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StructuredCoder.java
index f472773a3ba..9294fc1ba06 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StructuredCoder.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StructuredCoder.java
@@ -56,6 +56,7 @@ public abstract class StructuredCoder<T> extends Coder<T> {
    *     components.
    */
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object o) {
     if (o == null || this.getClass() != o.getClass()) {
       return false;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ZstdCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ZstdCoder.java
index 2abd9049794..dc1fc55699c 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ZstdCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ZstdCoder.java
@@ -154,7 +154,7 @@ public class ZstdCoder<T> extends Coder<T> {
     if (o == this) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof ZstdCoder)) {
       return false;
     }
     ZstdCoder<?> that = (ZstdCoder<?>) o;
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java
index 5c9e19da160..b7590a4c2d1 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java
@@ -475,7 +475,7 @@ public class FileIO {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ReadableFile)) {
         return false;
       }
       ReadableFile that = (ReadableFile) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/range/OffsetRange.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/range/OffsetRange.java
index f8437d743c2..958da446d12 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/range/OffsetRange.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/range/OffsetRange.java
@@ -69,7 +69,7 @@ public class OffsetRange
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof OffsetRange)) {
       return false;
     }
 
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java
index a20af2d1a59..75796465b33 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java
@@ -329,6 +329,7 @@ class ProxyInvocationHandler implements InvocationHandler, 
Serializable {
    *     same ProxyInvocationHandler as this.
    */
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object obj) {
     return obj != null
         && ((obj instanceof ProxyInvocationHandler && this == obj)
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/CachingFactory.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/CachingFactory.java
index d2d7a1c78d2..c8c67931ec2 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/CachingFactory.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/CachingFactory.java
@@ -76,7 +76,7 @@ public class CachingFactory<CreatedT extends @NonNull Object> 
implements Factory
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof CachingFactory)) {
       return false;
     }
     CachingFactory<?> that = (CachingFactory<?>) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/FromRowUsingCreator.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/FromRowUsingCreator.java
index 69ae81bcd07..464dc00cec7 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/FromRowUsingCreator.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/FromRowUsingCreator.java
@@ -275,7 +275,7 @@ class FromRowUsingCreator<T> implements 
SerializableFunction<Row, T>, Function<R
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof FromRowUsingCreator)) {
       return false;
     }
     FromRowUsingCreator<?> that = (FromRowUsingCreator<?>) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/GetterBasedSchemaProvider.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/GetterBasedSchemaProvider.java
index 5645a7c435b..e08f193d407 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/GetterBasedSchemaProvider.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/GetterBasedSchemaProvider.java
@@ -146,7 +146,7 @@ public abstract class GetterBasedSchemaProvider implements 
SchemaProvider {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ToRowWithValueGetters)) {
         return false;
       }
       ToRowWithValueGetters<?> that = (ToRowWithValueGetters<?>) o;
@@ -186,6 +186,7 @@ public abstract class GetterBasedSchemaProvider implements 
SchemaProvider {
   }
 
   @Override
+  @SuppressWarnings("EqualsGetClass")
   public boolean equals(@Nullable Object obj) {
     return obj != null && this.getClass() == obj.getClass();
   }
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/JavaBeanSchema.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/JavaBeanSchema.java
index 9d5e2fa9c74..7d0b3a6175c 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/JavaBeanSchema.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/JavaBeanSchema.java
@@ -95,7 +95,7 @@ public class JavaBeanSchema extends 
GetterBasedSchemaProviderV2 {
 
     @Override
     public boolean equals(@Nullable Object obj) {
-      return obj != null && this.getClass() == obj.getClass();
+      return obj instanceof GetterTypeSupplier;
     }
   }
 
@@ -148,7 +148,7 @@ public class JavaBeanSchema extends 
GetterBasedSchemaProviderV2 {
 
     @Override
     public boolean equals(@Nullable Object obj) {
-      return obj != null && this.getClass() == obj.getClass();
+      return obj instanceof SetterTypeSupplier;
     }
   }
 
@@ -236,6 +236,6 @@ public class JavaBeanSchema extends 
GetterBasedSchemaProviderV2 {
 
   @Override
   public boolean equals(@Nullable Object obj) {
-    return obj != null && this.getClass() == obj.getClass();
+    return obj instanceof JavaBeanSchema;
   }
 }
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java
index ecedfd0f03b..93dd4e1227e 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java
@@ -407,7 +407,7 @@ public class Schema implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Schema)) {
       return false;
     }
     Schema other = (Schema) o;
@@ -1246,7 +1246,7 @@ public class Schema implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Options)) {
         return false;
       }
       Options options1 = (Options) o;
@@ -1296,7 +1296,7 @@ public class Schema implements Serializable {
         if (this == o) {
           return true;
         }
-        if (o == null || getClass() != o.getClass()) {
+        if (!(o instanceof Option)) {
           return false;
         }
         Option option = (Option) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaCoder.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaCoder.java
index b93b64f7dbe..5223cab8f7c 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaCoder.java
@@ -204,7 +204,7 @@ public class SchemaCoder<T> extends CustomCoder<T> {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof SchemaCoder)) {
       return false;
     }
     SchemaCoder<?> that = (SchemaCoder<?>) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/EnumerationType.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/EnumerationType.java
index 96708bd1d6e..b04c36ab3e9 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/EnumerationType.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/EnumerationType.java
@@ -163,7 +163,7 @@ public class EnumerationType implements LogicalType<Value, 
Integer> {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Value)) {
         return false;
       }
       Value enumValue = (Value) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/OneOfType.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/OneOfType.java
index 609c15859ad..289d405d2ac 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/OneOfType.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/logicaltypes/OneOfType.java
@@ -206,7 +206,7 @@ public class OneOfType implements 
LogicalType<OneOfType.Value, Row> {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Value)) {
         return false;
       }
       Value value1 = (Value) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java
index 8bc6c99ca5c..83209092691 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java
@@ -634,7 +634,7 @@ public class ByteBuddyUtils {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof TransformingMap)) {
         return false;
       }
       TransformingMap<?, ?, ?, ?> that = (TransformingMap<?, ?, ?, ?>) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/PAssert.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/PAssert.java
index 7a102747b9f..be834228fbb 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/PAssert.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/PAssert.java
@@ -204,7 +204,7 @@ public class PAssert {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PAssertionSite)) {
         return false;
       }
       PAssertionSite that = (PAssertionSite) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/ApproximateUnique.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/ApproximateUnique.java
index 2ee4eeba6cb..d521b6cb121 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/ApproximateUnique.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/ApproximateUnique.java
@@ -352,7 +352,7 @@ public class ApproximateUnique {
         if (this == o) {
           return true;
         }
-        if (o == null || getClass() != o.getClass()) {
+        if (!(o instanceof LargestUnique)) {
           return false;
         }
         LargestUnique that = (LargestUnique) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/CombineFns.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/CombineFns.java
index 22ca8073777..404d199078f 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/CombineFns.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/CombineFns.java
@@ -213,7 +213,7 @@ public class CombineFns {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CoCombineResult)) {
         return false;
       }
       CoCombineResult that = (CoCombineResult) o;
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Count.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Count.java
index 9f0b276af49..858d2f532bb 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Count.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Count.java
@@ -195,7 +195,7 @@ public class Count {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && getClass().equals(other.getClass());
+      return other instanceof CountFn;
     }
 
     @Override
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/PeriodicSequence.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/PeriodicSequence.java
index 9ad3141f966..096da842b82 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/PeriodicSequence.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/PeriodicSequence.java
@@ -85,7 +85,7 @@ public class PeriodicSequence
         return true;
       }
 
-      if (obj == null || obj.getClass() != this.getClass()) {
+      if (!(obj instanceof SequenceDefinition)) {
         return false;
       }
 
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sum.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sum.java
index 4c478b4f4e7..512b8fb7ed2 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sum.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Sum.java
@@ -142,7 +142,7 @@ public class Sum {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(this.getClass());
+      return other instanceof SumIntegerFn;
     }
 
     @Override
@@ -165,7 +165,7 @@ public class Sum {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(this.getClass());
+      return other instanceof SumLongFn;
     }
 
     @Override
@@ -188,7 +188,7 @@ public class Sum {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(this.getClass());
+      return other instanceof SumDoubleFn;
     }
 
     @Override
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/join/RawUnionValue.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/join/RawUnionValue.java
index 0548f9a8e68..4037fd8bee6 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/join/RawUnionValue.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/join/RawUnionValue.java
@@ -54,7 +54,7 @@ public class RawUnionValue {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof RawUnionValue)) {
       return false;
     }
 
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformMatchers.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformMatchers.java
index 747f3b32cef..19377b20830 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformMatchers.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformMatchers.java
@@ -84,7 +84,7 @@ public class PTransformMatchers {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof EqualUrnPTransformMatcher)) {
         return false;
       }
       EqualUrnPTransformMatcher that = (EqualUrnPTransformMatcher) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
index 38b982a0937..f3569322a18 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/SerializableCoderTest.java
@@ -77,7 +77,7 @@ public class SerializableCoderTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MyRecord)) {
         return false;
       }
 
@@ -326,7 +326,7 @@ public class SerializableCoderTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ProperEquals)) {
         return false;
       }
 
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/TimestampPrefixingWindowCoderTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/TimestampPrefixingWindowCoderTest.java
index 6f71962ecc7..e220ce4808f 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/TimestampPrefixingWindowCoderTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/TimestampPrefixingWindowCoderTest.java
@@ -51,7 +51,7 @@ public class TimestampPrefixingWindowCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CustomWindow)) {
         return false;
       }
       CustomWindow that = (CustomWindow) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsFactoryTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsFactoryTest.java
index 5a112d5084d..6a68769e370 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsFactoryTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsFactoryTest.java
@@ -2174,7 +2174,7 @@ public class PipelineOptionsFactoryTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ComplexType2)) {
         return false;
       }
       ComplexType2 that = (ComplexType2) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
index 780ca9adc27..af1a5cb249b 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
@@ -683,9 +683,7 @@ public class ProxyInvocationHandlerTest {
 
     @Override
     public boolean equals(@Nullable Object obj) {
-      return obj != null
-          && getClass().equals(obj.getClass())
-          && doubleField == ((InnerType) obj).doubleField;
+      return obj instanceof InnerType && doubleField == ((InnerType) 
obj).doubleField;
     }
   }
 
@@ -703,8 +701,7 @@ public class ProxyInvocationHandlerTest {
 
     @Override
     public boolean equals(@Nullable Object obj) {
-      return obj != null
-          && getClass().equals(obj.getClass())
+      return obj instanceof ComplexType
           && Objects.equals(stringField, ((ComplexType) obj).stringField)
           && Objects.equals(intField, ((ComplexType) obj).intField)
           && Objects.equals(genericType, ((ComplexType) obj).genericType)
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/SchemaCoderTest.java 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/SchemaCoderTest.java
index 75a43874341..9a7741981dc 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/SchemaCoderTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/SchemaCoderTest.java
@@ -144,7 +144,7 @@ public class SchemaCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimpleBean)) {
         return false;
       }
       SimpleBean that = (SimpleBean) o;
@@ -179,7 +179,7 @@ public class SchemaCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimplePojo)) {
         return false;
       }
       SimplePojo that = (SimplePojo) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/CoGroupTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/CoGroupTest.java
index a0b48bb7fa0..7788b37ad8f 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/CoGroupTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/CoGroupTest.java
@@ -85,7 +85,7 @@ public class CoGroupTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CgPojo)) {
         return false;
       }
       CgPojo cgPojo = (CgPojo) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/ConvertTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/ConvertTest.java
index 32d32e8918e..93d6984d47e 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/ConvertTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/ConvertTest.java
@@ -65,7 +65,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO1)) {
         return false;
       }
       POJO1 pojo1 = (POJO1) o;
@@ -95,7 +95,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO1Nested)) {
         return false;
       }
       POJO1Nested that = (POJO1Nested) o;
@@ -149,7 +149,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO2)) {
         return false;
       }
       POJO2 pojo2 = (POJO2) o;
@@ -179,7 +179,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO2Nested)) {
         return false;
       }
       POJO2Nested that = (POJO2Nested) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/JsonUtilsTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/JsonUtilsTest.java
index b67b72073e9..c831a6e562f 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/JsonUtilsTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/JsonUtilsTest.java
@@ -173,7 +173,7 @@ public class JsonUtilsTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Cat)) {
         return false;
       }
       Cat cat = (Cat) o;
@@ -227,7 +227,7 @@ public class JsonUtilsTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedCat)) {
         return false;
       }
       NestedCat nestedCat = (NestedCat) o;
@@ -277,7 +277,7 @@ public class JsonUtilsTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ArrayOfCats)) {
         return false;
       }
       ArrayOfCats that = (ArrayOfCats) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestJavaBeans.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestJavaBeans.java
index f8affb08ac9..738099de5df 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestJavaBeans.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestJavaBeans.java
@@ -69,7 +69,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NullableBean)) {
         return false;
       }
       NullableBean that = (NullableBean) o;
@@ -102,7 +102,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MismatchingNullableBean)) {
         return false;
       }
       MismatchingNullableBean that = (MismatchingNullableBean) o;
@@ -260,7 +260,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimpleBean)) {
         return false;
       }
       SimpleBean that = (SimpleBean) o;
@@ -447,7 +447,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimpleBean)) {
         return false;
       }
       SimpleBean that = (SimpleBean) o;
@@ -617,7 +617,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimpleBeanWithAnnotations)) {
         return false;
       }
       SimpleBeanWithAnnotations that = (SimpleBeanWithAnnotations) o;
@@ -696,7 +696,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedBean)) {
         return false;
       }
       NestedBean that = (NestedBean) o;
@@ -758,7 +758,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PrimitiveArrayBean)) {
         return false;
       }
       PrimitiveArrayBean that = (PrimitiveArrayBean) o;
@@ -808,7 +808,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedArrayBean)) {
         return false;
       }
       NestedArrayBean that = (NestedArrayBean) o;
@@ -849,7 +849,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedArraysBean)) {
         return false;
       }
       NestedArraysBean that = (NestedArraysBean) o;
@@ -900,7 +900,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedCollectionBean)) {
         return false;
       }
       NestedCollectionBean that = (NestedCollectionBean) o;
@@ -945,7 +945,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PrimitiveMapBean)) {
         return false;
       }
       PrimitiveMapBean that = (PrimitiveMapBean) o;
@@ -986,7 +986,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedMapBean)) {
         return false;
       }
       NestedMapBean that = (NestedMapBean) o;
@@ -1070,7 +1070,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof BeanWithBoxedFields)) {
         return false;
       }
       BeanWithBoxedFields that = (BeanWithBoxedFields) o;
@@ -1131,7 +1131,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof BeanWithByteArray)) {
         return false;
       }
       BeanWithByteArray that = (BeanWithByteArray) o;
@@ -1174,7 +1174,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof IterableBean)) {
         return false;
       }
       IterableBean that = (IterableBean) o;
@@ -1215,7 +1215,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ArrayOfByteArray)) {
         return false;
       }
       ArrayOfByteArray that = (ArrayOfByteArray) o;
@@ -1264,7 +1264,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof BeanWithCaseFormat)) {
         return false;
       }
       BeanWithCaseFormat that = (BeanWithCaseFormat) o;
@@ -1337,7 +1337,7 @@ public class TestJavaBeans {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof BeanWithCaseFormat)) {
         return false;
       }
       BeanWithCaseFormat that = (BeanWithCaseFormat) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestPOJOs.java 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestPOJOs.java
index 789de02adee..eca6b109986 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestPOJOs.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/TestPOJOs.java
@@ -92,7 +92,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJOWithNestedNullable)) {
         return false;
       }
       POJOWithNestedNullable that = (POJOWithNestedNullable) o;
@@ -302,7 +302,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof AnnotatedSimplePojo)) {
         return false;
       }
       AnnotatedSimplePojo that = (AnnotatedSimplePojo) o;
@@ -440,7 +440,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimplePOJO)) {
         return false;
       }
       SimplePOJO that = (SimplePOJO) o;
@@ -511,7 +511,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedPOJO)) {
         return false;
       }
       NestedPOJO that = (NestedPOJO) o;
@@ -549,7 +549,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PrimitiveArrayPOJO)) {
         return false;
       }
       PrimitiveArrayPOJO that = (PrimitiveArrayPOJO) o;
@@ -591,7 +591,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedArrayPOJO)) {
         return false;
       }
       NestedArrayPOJO that = (NestedArrayPOJO) o;
@@ -624,7 +624,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedArraysPOJO)) {
         return false;
       }
       NestedArraysPOJO that = (NestedArraysPOJO) o;
@@ -659,7 +659,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedCollectionPOJO)) {
         return false;
       }
       NestedCollectionPOJO that = (NestedCollectionPOJO) o;
@@ -696,7 +696,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PrimitiveMapPOJO)) {
         return false;
       }
       PrimitiveMapPOJO that = (PrimitiveMapPOJO) o;
@@ -730,7 +730,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedMapPOJO)) {
         return false;
       }
       NestedMapPOJO that = (NestedMapPOJO) o;
@@ -774,7 +774,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJOWithBoxedFields)) {
         return false;
       }
       POJOWithBoxedFields that = (POJOWithBoxedFields) o;
@@ -819,7 +819,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJOWithByteArray)) {
         return false;
       }
       POJOWithByteArray that = (POJOWithByteArray) o;
@@ -927,7 +927,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PojoWithEnum)) {
         return false;
       }
       PojoWithEnum that = (PojoWithEnum) o;
@@ -999,7 +999,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NullablePOJO)) {
         return false;
       }
       NullablePOJO that = (NullablePOJO) o;
@@ -1075,7 +1075,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PojoWithCaseFormat)) {
         return false;
       }
       PojoWithCaseFormat that = (PojoWithCaseFormat) o;
@@ -1124,7 +1124,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SelfNestedPOJO)) {
         return false;
       }
       SelfNestedPOJO that = (SelfNestedPOJO) o;
@@ -1155,7 +1155,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FirstCircularNestedPOJO)) {
         return false;
       }
       FirstCircularNestedPOJO that = (FirstCircularNestedPOJO) o;
@@ -1186,7 +1186,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SecondCircularNestedPOJO)) {
         return false;
       }
       SecondCircularNestedPOJO that = (SecondCircularNestedPOJO) o;
@@ -1217,7 +1217,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NestedPOJOWithSimplePOJO)) {
         return false;
       }
       NestedPOJOWithSimplePOJO that = (NestedPOJOWithSimplePOJO) o;
@@ -1254,7 +1254,7 @@ public class TestPOJOs {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimplePOJOWithDescription)) {
         return false;
       }
       SimplePOJOWithDescription that = (SimplePOJOWithDescription) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/CombineFnsTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/CombineFnsTest.java
index 5408dad1d1f..328bfba8f3c 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/CombineFnsTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/CombineFnsTest.java
@@ -329,7 +329,7 @@ public class CombineFnsTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof UserString)) {
         return false;
       }
       UserString that = (UserString) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/windowing/WindowTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/windowing/WindowTest.java
index 81cb7ffc02b..b0b82430a44 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/windowing/WindowTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/transforms/windowing/WindowTest.java
@@ -709,7 +709,7 @@ public class WindowTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CustomWindow)) {
         return false;
       }
       CustomWindow that = (CustomWindow) o;
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/CombineTranslationTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/CombineTranslationTest.java
index 79cd79dcf3a..c45a8734f0e 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/CombineTranslationTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/CombineTranslationTest.java
@@ -224,7 +224,7 @@ public class CombineTranslationTest {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(TestCombineFn.class);
+      return other instanceof TestCombineFn;
     }
 
     @Override
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/ReadTranslationTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/ReadTranslationTest.java
index 90e1914cb93..9150d2d6216 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/ReadTranslationTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/ReadTranslationTest.java
@@ -114,7 +114,7 @@ public class ReadTranslationTest {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(TestBoundedSource.class);
+      return other instanceof TestBoundedSource;
     }
 
     @Override
@@ -148,7 +148,7 @@ public class ReadTranslationTest {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && 
other.getClass().equals(TestUnboundedSource.class);
+      return other instanceof TestUnboundedSource;
     }
 
     @Override
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowIntoTranslationTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowIntoTranslationTest.java
index 1f77c571de7..875554528d1 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowIntoTranslationTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowIntoTranslationTest.java
@@ -114,7 +114,7 @@ public class WindowIntoTranslationTest {
 
     @Override
     public boolean equals(@Nullable Object other) {
-      return other != null && other.getClass().equals(this.getClass());
+      return other instanceof CustomWindows;
     }
 
     @Override
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowingStrategyTranslationTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowingStrategyTranslationTest.java
index 95d3171c524..6ab3eae54a5 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowingStrategyTranslationTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/WindowingStrategyTranslationTest.java
@@ -210,7 +210,7 @@ public class WindowingStrategyTranslationTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CustomWindow)) {
         return false;
       }
       CustomWindow that = (CustomWindow) o;
@@ -315,7 +315,7 @@ public class WindowingStrategyTranslationTest {
 
     @Override
     public boolean equals(@Nullable Object o) {
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CustomWindowFn)) {
         return false;
       }
 
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/graph/ProjectionPushdownOptimizerTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/graph/ProjectionPushdownOptimizerTest.java
index 9707062c4f2..8dd428717d1 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/graph/ProjectionPushdownOptimizerTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/construction/graph/ProjectionPushdownOptimizerTest.java
@@ -217,7 +217,7 @@ public class ProjectionPushdownOptimizerTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SchemaSourceTransform)) {
         return false;
       }
       SchemaSourceTransform<?> that = (SchemaSourceTransform<?>) o;
@@ -345,7 +345,7 @@ public class ProjectionPushdownOptimizerTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MultipleOutputSourceWithPushdown)) {
         return false;
       }
       MultipleOutputSourceWithPushdown that = 
(MultipleOutputSourceWithPushdown) o;
diff --git 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoder.java
 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoder.java
index f943c098119..f8cc1a4074c 100644
--- 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoder.java
+++ 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoder.java
@@ -865,7 +865,7 @@ public class AvroCoder<T> extends CustomCoder<T> {
     if (this == other) {
       return true;
     }
-    if (other == null || this.getClass() != other.getClass()) {
+    if (!(other instanceof AvroCoder)) {
       return false;
     }
     AvroCoder<?> that = (AvroCoder<?>) other;
@@ -940,7 +940,7 @@ public class AvroCoder<T> extends CustomCoder<T> {
 
     @Override
     public boolean equals(@Nullable Object o) {
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof AvroCoderCacheKey)) {
         return false;
       }
       AvroCoderCacheKey that = (AvroCoderCacheKey) o;
diff --git 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/io/AvroDatumFactory.java
 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/io/AvroDatumFactory.java
index 67125a6ad24..7d2fd43d7ab 100644
--- 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/io/AvroDatumFactory.java
+++ 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/io/AvroDatumFactory.java
@@ -96,7 +96,7 @@ public abstract class AvroDatumFactory<T>
     if (this == other) {
       return true;
     }
-    if (other == null || getClass() != other.getClass()) {
+    if (!(other instanceof AvroDatumFactory)) {
       return false;
     }
     AvroDatumFactory<?> that = (AvroDatumFactory<?>) other;
diff --git 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java
 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java
index 6f4c29305ee..45726564642 100644
--- 
a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java
+++ 
b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtils.java
@@ -767,7 +767,7 @@ public class AvroUtils {
       if (this == other) {
         return true;
       }
-      if (other == null || getClass() != other.getClass()) {
+      if (!(other instanceof GenericRecordToRowFn)) {
         return false;
       }
       GenericRecordToRowFn that = (GenericRecordToRowFn) other;
@@ -806,7 +806,7 @@ public class AvroUtils {
       if (this == other) {
         return true;
       }
-      if (other == null || getClass() != other.getClass()) {
+      if (!(other instanceof RowToGenericRecordFn)) {
         return false;
       }
       RowToGenericRecordFn that = (RowToGenericRecordFn) other;
diff --git 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoderTest.java
 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoderTest.java
index 2c0337979c0..df871432c43 100644
--- 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoderTest.java
+++ 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/coders/AvroCoderTest.java
@@ -156,7 +156,7 @@ public class AvroCoderTest {
       if (this == other) {
         return true;
       }
-      if (other == null || getClass() != other.getClass()) {
+      if (!(other instanceof Pojo)) {
         return false;
       }
       Pojo that = (Pojo) other;
diff --git 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/SchemaCoderTest.java
 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/SchemaCoderTest.java
index 0cda00a6e86..db7df3c9bd5 100644
--- 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/SchemaCoderTest.java
+++ 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/SchemaCoderTest.java
@@ -80,7 +80,7 @@ public class SchemaCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SimpleAvro)) {
         return false;
       }
       SimpleAvro that = (SimpleAvro) o;
diff --git 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/transforms/ConvertTest.java
 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/transforms/ConvertTest.java
index 1cc746258a1..f8b3ab700b7 100644
--- 
a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/transforms/ConvertTest.java
+++ 
b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/transforms/ConvertTest.java
@@ -66,7 +66,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO1)) {
         return false;
       }
       POJO1 pojo1 = (POJO1) o;
@@ -96,7 +96,7 @@ public class ConvertTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof POJO1Nested)) {
         return false;
       }
       POJO1Nested that = (POJO1Nested) o;
diff --git 
a/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/gcsfs/GcsPath.java
 
b/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/gcsfs/GcsPath.java
index 745ff4d3630..e242bd136b1 100644
--- 
a/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/gcsfs/GcsPath.java
+++ 
b/sdks/java/extensions/google-cloud-platform-core/src/main/java/org/apache/beam/sdk/extensions/gcp/util/gcsfs/GcsPath.java
@@ -552,7 +552,7 @@ public class GcsPath implements Path, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof GcsPath)) {
       return false;
     }
 
diff --git 
a/sdks/java/extensions/jackson/src/test/java/org/apache/beam/sdk/extensions/jackson/JacksonTransformsTest.java
 
b/sdks/java/extensions/jackson/src/test/java/org/apache/beam/sdk/extensions/jackson/JacksonTransformsTest.java
index bae86595ed0..b8f171ab014 100644
--- 
a/sdks/java/extensions/jackson/src/test/java/org/apache/beam/sdk/extensions/jackson/JacksonTransformsTest.java
+++ 
b/sdks/java/extensions/jackson/src/test/java/org/apache/beam/sdk/extensions/jackson/JacksonTransformsTest.java
@@ -406,7 +406,7 @@ public class JacksonTransformsTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MyEmptyBean)) {
         return false;
       }
 
diff --git 
a/sdks/java/extensions/kryo/src/main/java/org/apache/beam/sdk/extensions/kryo/KryoCoder.java
 
b/sdks/java/extensions/kryo/src/main/java/org/apache/beam/sdk/extensions/kryo/KryoCoder.java
index 4bedd4447f0..8f6660cf5b7 100644
--- 
a/sdks/java/extensions/kryo/src/main/java/org/apache/beam/sdk/extensions/kryo/KryoCoder.java
+++ 
b/sdks/java/extensions/kryo/src/main/java/org/apache/beam/sdk/extensions/kryo/KryoCoder.java
@@ -283,7 +283,7 @@ public class KryoCoder<T> extends CustomCoder<T> {
 
   @Override
   public boolean equals(@Nullable Object other) {
-    if (other != null && getClass().equals(other.getClass())) {
+    if (other instanceof KryoCoder) {
       return instanceId.equals(((KryoCoder<?>) other).instanceId);
     }
     return false;
diff --git 
a/sdks/java/extensions/kryo/src/test/java/org/apache/beam/sdk/extensions/kryo/KryoCoderTest.java
 
b/sdks/java/extensions/kryo/src/test/java/org/apache/beam/sdk/extensions/kryo/KryoCoderTest.java
index bcf126b26cc..30797e6d871 100644
--- 
a/sdks/java/extensions/kryo/src/test/java/org/apache/beam/sdk/extensions/kryo/KryoCoderTest.java
+++ 
b/sdks/java/extensions/kryo/src/test/java/org/apache/beam/sdk/extensions/kryo/KryoCoderTest.java
@@ -238,7 +238,7 @@ public class KryoCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ClassToBeEncoded)) {
         return false;
       }
       ClassToBeEncoded that = (ClassToBeEncoded) o;
@@ -267,7 +267,7 @@ public class KryoCoderTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof TestClass)) {
         return false;
       }
       TestClass testClass = (TestClass) o;
diff --git 
a/sdks/java/extensions/ordered/src/main/java/org/apache/beam/sdk/extensions/ordered/OrderedProcessingStatus.java
 
b/sdks/java/extensions/ordered/src/main/java/org/apache/beam/sdk/extensions/ordered/OrderedProcessingStatus.java
index 806571efc2e..3ca5296d3b6 100644
--- 
a/sdks/java/extensions/ordered/src/main/java/org/apache/beam/sdk/extensions/ordered/OrderedProcessingStatus.java
+++ 
b/sdks/java/extensions/ordered/src/main/java/org/apache/beam/sdk/extensions/ordered/OrderedProcessingStatus.java
@@ -103,7 +103,7 @@ public abstract class OrderedProcessingStatus {
     if (obj == null) {
       return false;
     }
-    if (!OrderedProcessingStatus.class.isAssignableFrom(obj.getClass())) {
+    if (!(obj instanceof OrderedProcessingStatus)) {
       return false;
     }
     OrderedProcessingStatus that = (OrderedProcessingStatus) obj;
diff --git 
a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/DynamicProtoCoder.java
 
b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/DynamicProtoCoder.java
index 76d73da90fd..9a9af74e48a 100644
--- 
a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/DynamicProtoCoder.java
+++ 
b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/DynamicProtoCoder.java
@@ -103,6 +103,7 @@ public class DynamicProtoCoder extends 
ProtoCoder<DynamicMessage> {
             .build());
   }
 
+  @SuppressWarnings("EqualsGetClass")
   @Override
   public boolean equals(@Nullable Object other) {
     if (this == other) {
diff --git 
a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoCoder.java
 
b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoCoder.java
index 1abf4e88d1e..54aff34a056 100644
--- 
a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoCoder.java
+++ 
b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoCoder.java
@@ -208,6 +208,7 @@ public class ProtoCoder<T extends Message> extends 
CustomCoder<T> {
     }
   }
 
+  @SuppressWarnings("EqualsGetClass")
   @Override
   public boolean equals(@Nullable Object other) {
     if (this == other) {
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Customer.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Customer.java
index b6f1cc67981..3261dea2b96 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Customer.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Customer.java
@@ -70,7 +70,7 @@ public class Customer implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Customer)) {
       return false;
     }
     Customer customer = (Customer) o;
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Order.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Order.java
index 7158c9e4d1a..c6466ee3893 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Order.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/example/model/Order.java
@@ -57,7 +57,7 @@ public class Order implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Order)) {
       return false;
     }
     Order order = (Order) o;
diff --git 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/bigquery/BeamSqlUnparseContext.java
 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/bigquery/BeamSqlUnparseContext.java
index 143bab55886..a7bb2e701ee 100644
--- 
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/bigquery/BeamSqlUnparseContext.java
+++ 
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/bigquery/BeamSqlUnparseContext.java
@@ -157,7 +157,7 @@ public class BeamSqlUnparseContext extends 
SqlImplementor.SimpleContext {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SqlDateTimeLiteral)) {
         return false;
       }
       if (!super.equals(o)) {
diff --git 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/InferredJavaBeanSqlTest.java
 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/InferredJavaBeanSqlTest.java
index 45b9601484d..aa7d33ee900 100644
--- 
a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/InferredJavaBeanSqlTest.java
+++ 
b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/InferredJavaBeanSqlTest.java
@@ -73,7 +73,7 @@ public class InferredJavaBeanSqlTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof PersonBean)) {
         return false;
       }
       PersonBean that = (PersonBean) o;
@@ -120,7 +120,7 @@ public class InferredJavaBeanSqlTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof OrderBean)) {
         return false;
       }
       OrderBean orderBean = (OrderBean) o;
diff --git 
a/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/state/FnApiStateAccessor.java
 
b/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/state/FnApiStateAccessor.java
index 6913c75a5f2..8d02e424adc 100644
--- 
a/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/state/FnApiStateAccessor.java
+++ 
b/sdks/java/harness/src/main/java/org/apache/beam/fn/harness/state/FnApiStateAccessor.java
@@ -1231,7 +1231,7 @@ public class FnApiStateAccessor<K> implements 
SideInputReader, StateBinder {
       }
       UserStateCacheKeyBase other = (UserStateCacheKeyBase) o;
       return hash == other.hash
-          && this.getClass().equals(o.getClass())
+          && this.getClass().equals(other.getClass())
           && ptransformId.equals(other.ptransformId)
           && stateId.equals(other.stateId)
           && window.equals(other.window)
diff --git 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/common/ObjectPool.java
 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/common/ObjectPool.java
index ea3c95b2bbd..73e939d4237 100644
--- 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/common/ObjectPool.java
+++ 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/common/ObjectPool.java
@@ -134,7 +134,7 @@ public class ObjectPool<KeyT extends @NonNull Object, 
ObjectT extends @NonNull O
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ObjectPool.RefCounted)) {
         return false;
       }
       // only identity of ref counted shared object matters
diff --git 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/ShardCheckpoint.java
 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/ShardCheckpoint.java
index 4a03ab5e85a..905d39e69ba 100644
--- 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/ShardCheckpoint.java
+++ 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/ShardCheckpoint.java
@@ -239,7 +239,7 @@ class ShardCheckpoint implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof ShardCheckpoint)) {
       return false;
     }
     ShardCheckpoint that = (ShardCheckpoint) o;
diff --git 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/StartingPoint.java
 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/StartingPoint.java
index b094a7011e0..f6dbe609d34 100644
--- 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/StartingPoint.java
+++ 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/StartingPoint.java
@@ -65,7 +65,7 @@ class StartingPoint implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof StartingPoint)) {
       return false;
     }
     StartingPoint that = (StartingPoint) o;
diff --git 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaProvider.java
 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaProvider.java
index e8b05a8a319..21b5c7bcf97 100644
--- 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaProvider.java
+++ 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaProvider.java
@@ -134,7 +134,7 @@ public class AwsSchemaProvider extends 
GetterBasedSchemaProviderV2 {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof FromRowWithBuilder)) {
         return false;
       }
       FromRowWithBuilder<?> that = (FromRowWithBuilder<?>) o;
diff --git 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/sqs/SqsCheckpointMark.java
 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/sqs/SqsCheckpointMark.java
index e18770c8c6a..583eabcca95 100644
--- 
a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/sqs/SqsCheckpointMark.java
+++ 
b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/sqs/SqsCheckpointMark.java
@@ -99,7 +99,7 @@ class SqsCheckpointMark implements 
UnboundedSource.CheckpointMark, Serializable
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof SqsCheckpointMark)) {
       return false;
     }
     SqsCheckpointMark that = (SqsCheckpointMark) o;
diff --git 
a/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/dynamodb/DynamoDBIOWriteTest.java
 
b/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/dynamodb/DynamoDBIOWriteTest.java
index 041615685c6..de09cfe09ad 100644
--- 
a/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/dynamodb/DynamoDBIOWriteTest.java
+++ 
b/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/dynamodb/DynamoDBIOWriteTest.java
@@ -257,7 +257,7 @@ public class DynamoDBIOWriteTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Item)) {
         return false;
       }
       return Objects.equals(entries, ((Item) o).entries);
diff --git 
a/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/kinesis/EFOShardSubscribersPoolTest.java
 
b/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/kinesis/EFOShardSubscribersPoolTest.java
index d99a35a7dda..502c04cc47d 100644
--- 
a/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/kinesis/EFOShardSubscribersPoolTest.java
+++ 
b/sdks/java/io/amazon-web-services2/src/test/java/org/apache/beam/sdk/io/aws2/kinesis/EFOShardSubscribersPoolTest.java
@@ -941,7 +941,7 @@ public class EFOShardSubscribersPoolTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof KinesisRecordView)) {
         return false;
       }
       KinesisRecordView that = (KinesisRecordView) o;
diff --git 
a/sdks/java/io/cassandra/src/test/java/org/apache/beam/sdk/io/cassandra/CassandraIOTest.java
 
b/sdks/java/io/cassandra/src/test/java/org/apache/beam/sdk/io/cassandra/CassandraIOTest.java
index df52421db23..f63c819d420 100644
--- 
a/sdks/java/io/cassandra/src/test/java/org/apache/beam/sdk/io/cassandra/CassandraIOTest.java
+++ 
b/sdks/java/io/cassandra/src/test/java/org/apache/beam/sdk/io/cassandra/CassandraIOTest.java
@@ -808,7 +808,7 @@ public class CassandraIOTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Scientist)) {
         return false;
       }
       Scientist scientist = (Scientist) o;
@@ -1125,7 +1125,7 @@ public class CassandraIOTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ReservedKeywordEntity)) {
         return false;
       }
       ReservedKeywordEntity that = (ReservedKeywordEntity) o;
@@ -1166,7 +1166,7 @@ public class CassandraIOTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof CustomQueryEntity)) {
         return false;
       }
       CustomQueryEntity that = (CustomQueryEntity) o;
@@ -1203,7 +1203,7 @@ public class CassandraIOTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MultiPartitionEntity)) {
         return false;
       }
       MultiPartitionEntity that = (MultiPartitionEntity) o;
diff --git 
a/sdks/java/io/common/src/main/java/org/apache/beam/sdk/io/common/HashingFn.java
 
b/sdks/java/io/common/src/main/java/org/apache/beam/sdk/io/common/HashingFn.java
index ac6ab2c10b7..779880b1cc4 100644
--- 
a/sdks/java/io/common/src/main/java/org/apache/beam/sdk/io/common/HashingFn.java
+++ 
b/sdks/java/io/common/src/main/java/org/apache/beam/sdk/io/common/HashingFn.java
@@ -57,7 +57,7 @@ public class HashingFn extends CombineFn<String, 
HashingFn.Accum, String> {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Accum)) {
         return false;
       }
 
diff --git 
a/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowAdapter.java
 
b/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowAdapter.java
index f57ebc5f8d5..48e0ab846c2 100644
--- 
a/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowAdapter.java
+++ 
b/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowAdapter.java
@@ -75,7 +75,7 @@ class XmlRowAdapter implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof XmlRowAdapter)) {
       return false;
     }
     XmlRowAdapter that = (XmlRowAdapter) o;
diff --git 
a/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowValue.java
 
b/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowValue.java
index 74e74bb8422..199ac0b0f5c 100644
--- 
a/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowValue.java
+++ 
b/sdks/java/io/file-schema-transform/src/main/java/org/apache/beam/sdk/io/fileschematransform/XmlRowValue.java
@@ -211,7 +211,7 @@ class XmlRowValue implements Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof XmlRowValue)) {
       return false;
     }
 
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryInsertError.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryInsertError.java
index e2fe191416e..2cdfd1e3651 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryInsertError.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryInsertError.java
@@ -68,7 +68,7 @@ public class BigQueryInsertError {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof BigQueryInsertError)) {
       return false;
     }
     BigQueryInsertError that = (BigQueryInsertError) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryStorageStreamSource.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryStorageStreamSource.java
index 124a708eed6..1bc0b2895d9 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryStorageStreamSource.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryStorageStreamSource.java
@@ -85,7 +85,7 @@ class BigQueryStorageStreamSource<T> extends BoundedSource<T> 
{
     if (this == obj) {
       return true;
     }
-    if (obj == null || getClass() != obj.getClass()) {
+    if (!(obj instanceof BigQueryStorageStreamSource)) {
       return false;
     }
     BigQueryStorageStreamSource<?> other = (BigQueryStorageStreamSource<?>) 
obj;
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/PassThroughThenCleanup.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/PassThroughThenCleanup.java
index 3209af38361..6c2f34e2483 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/PassThroughThenCleanup.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/PassThroughThenCleanup.java
@@ -94,8 +94,9 @@ class PassThroughThenCleanup<T> extends 
PTransform<PCollection<T>, PCollection<T
     }
 
     @Override
+    @SuppressWarnings("EqualsGetClass")
     public boolean equals(@Nullable Object obj) {
-      return obj != null && obj.getClass() == this.getClass();
+      return obj instanceof CleanupOperation && obj.getClass() == 
this.getClass();
     }
   }
 
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/StorageApiFlushAndFinalizeDoFn.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/StorageApiFlushAndFinalizeDoFn.java
index fd3853d15e0..e9c3982b30a 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/StorageApiFlushAndFinalizeDoFn.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/StorageApiFlushAndFinalizeDoFn.java
@@ -134,7 +134,7 @@ public class StorageApiFlushAndFinalizeDoFn extends 
DoFn<KV<String, Operation>,
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Operation)) {
         return false;
       }
       Operation operation = (Operation) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/FhirSearchParameter.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/FhirSearchParameter.java
index 87692d87d63..c87368964ea 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/FhirSearchParameter.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/FhirSearchParameter.java
@@ -97,7 +97,7 @@ public class FhirSearchParameter<T> {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof FhirSearchParameter)) {
       return false;
     }
     FhirSearchParameter<?> that = (FhirSearchParameter<?>) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubClient.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubClient.java
index 3e2206d59c0..33349746217 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubClient.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubClient.java
@@ -156,7 +156,7 @@ public abstract class PubsubClient implements Closeable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof ProjectPath)) {
         return false;
       }
 
@@ -270,7 +270,7 @@ public abstract class PubsubClient implements Closeable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SubscriptionPath)) {
         return false;
       }
       SubscriptionPath that = (SubscriptionPath) o;
@@ -350,7 +350,7 @@ public abstract class PubsubClient implements Closeable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof TopicPath)) {
         return false;
       }
       TopicPath topicPath = (TopicPath) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/com/google/cloud/spanner/FakeBatchTransactionId.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/com/google/cloud/spanner/FakeBatchTransactionId.java
index 4862ac91870..f52223c7e8c 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/com/google/cloud/spanner/FakeBatchTransactionId.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/com/google/cloud/spanner/FakeBatchTransactionId.java
@@ -42,7 +42,7 @@ public class FakeBatchTransactionId extends 
BatchTransactionId {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof FakeBatchTransactionId)) {
       return false;
     }
     FakeBatchTransactionId that = (FakeBatchTransactionId) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIOReadTest.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIOReadTest.java
index a8aca7570b3..58d6a7c5d88 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIOReadTest.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIOReadTest.java
@@ -178,7 +178,7 @@ public class BigQueryIOReadTest implements Serializable {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof MyData)) {
         return false;
       }
       MyData myData = (MyData) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.java
index 21f6eef7936..33800e8f241 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.java
@@ -557,7 +557,7 @@ public class 
SpannerChangeStreamOrderedByTimestampAndTransactionIdIT {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof 
SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.SortKey)) {
         return false;
       }
       SpannerChangeStreamOrderedByTimestampAndTransactionIdIT.SortKey sortKey =
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyGloballyIT.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyGloballyIT.java
index 2b2c134032b..4eb6ca1c5c1 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyGloballyIT.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyGloballyIT.java
@@ -466,7 +466,7 @@ public class SpannerChangeStreamOrderedWithinKeyGloballyIT {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SortKey)) {
         return false;
       }
       SortKey sortKey = (SortKey) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyIT.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyIT.java
index 11d91e7695f..4510c18c77f 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyIT.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamOrderedWithinKeyIT.java
@@ -284,7 +284,7 @@ public class SpannerChangeStreamOrderedWithinKeyIT {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SortKey)) {
         return false;
       }
       SortKey sortKey = (SortKey) o;
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamTransactionBoundariesIT.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamTransactionBoundariesIT.java
index 4ff4f9a81e7..d8ed1493480 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamTransactionBoundariesIT.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/changestreams/it/SpannerChangeStreamTransactionBoundariesIT.java
@@ -291,7 +291,7 @@ public class SpannerChangeStreamTransactionBoundariesIT {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof SpannerChangeStreamTransactionBoundariesIT.SortKey)) {
         return false;
       }
       SpannerChangeStreamTransactionBoundariesIT.SortKey sortKey =
diff --git 
a/sdks/java/io/hadoop-format/src/test/java/org/apache/beam/sdk/io/hadoop/format/Employee.java
 
b/sdks/java/io/hadoop-format/src/test/java/org/apache/beam/sdk/io/hadoop/format/Employee.java
index 58ff2005594..197b0998a15 100644
--- 
a/sdks/java/io/hadoop-format/src/test/java/org/apache/beam/sdk/io/hadoop/format/Employee.java
+++ 
b/sdks/java/io/hadoop-format/src/test/java/org/apache/beam/sdk/io/hadoop/format/Employee.java
@@ -60,7 +60,7 @@ public class Employee {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Employee)) {
       return false;
     }
 
diff --git 
a/sdks/java/io/hbase/src/main/java/org/apache/beam/sdk/io/hbase/HBaseIO.java 
b/sdks/java/io/hbase/src/main/java/org/apache/beam/sdk/io/hbase/HBaseIO.java
index 6ca2fe1aa3b..b407be75161 100644
--- a/sdks/java/io/hbase/src/main/java/org/apache/beam/sdk/io/hbase/HBaseIO.java
+++ b/sdks/java/io/hbase/src/main/java/org/apache/beam/sdk/io/hbase/HBaseIO.java
@@ -299,7 +299,7 @@ public class HBaseIO {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Read)) {
         return false;
       }
       Read read = (Read) o;
@@ -676,7 +676,7 @@ public class HBaseIO {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Write)) {
         return false;
       }
       Write write = (Write) o;
@@ -842,7 +842,7 @@ public class HBaseIO {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof WriteRowMutations)) {
         return false;
       }
       WriteRowMutations writeRowMutations = (WriteRowMutations) o;
diff --git 
a/sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/SerializableDataFile.java
 
b/sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/SerializableDataFile.java
index f54cef16c15..1f717b82c21 100644
--- 
a/sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/SerializableDataFile.java
+++ 
b/sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/SerializableDataFile.java
@@ -227,7 +227,7 @@ abstract class SerializableDataFile {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof SerializableDataFile)) {
       return false;
     }
     SerializableDataFile that = (SerializableDataFile) o;
diff --git 
a/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcTestHelper.java
 
b/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcTestHelper.java
index d6361a88714..583f16b0689 100644
--- 
a/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcTestHelper.java
+++ 
b/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcTestHelper.java
@@ -52,7 +52,7 @@ class JdbcTestHelper {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof TestDto)) {
         return false;
       }
       TestDto testDto = (TestDto) o;
diff --git 
a/sdks/java/io/jms/src/main/java/org/apache/beam/sdk/io/jms/JmsCheckpointMark.java
 
b/sdks/java/io/jms/src/main/java/org/apache/beam/sdk/io/jms/JmsCheckpointMark.java
index e213561917d..276d61ae5ef 100644
--- 
a/sdks/java/io/jms/src/main/java/org/apache/beam/sdk/io/jms/JmsCheckpointMark.java
+++ 
b/sdks/java/io/jms/src/main/java/org/apache/beam/sdk/io/jms/JmsCheckpointMark.java
@@ -108,7 +108,7 @@ class JmsCheckpointMark implements 
UnboundedSource.CheckpointMark, Serializable
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof JmsCheckpointMark)) {
       return false;
     }
     JmsCheckpointMark that = (JmsCheckpointMark) o;
diff --git 
a/sdks/java/io/redis/src/main/java/org/apache/beam/sdk/io/redis/RedisCursor.java
 
b/sdks/java/io/redis/src/main/java/org/apache/beam/sdk/io/redis/RedisCursor.java
index 8b98b673f63..01ad429ac03 100644
--- 
a/sdks/java/io/redis/src/main/java/org/apache/beam/sdk/io/redis/RedisCursor.java
+++ 
b/sdks/java/io/redis/src/main/java/org/apache/beam/sdk/io/redis/RedisCursor.java
@@ -77,7 +77,7 @@ public class RedisCursor implements Comparable<RedisCursor>, 
Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof RedisCursor)) {
       return false;
     }
     RedisCursor that = (RedisCursor) o;
diff --git 
a/sdks/java/io/rrio/src/test/java/org/apache/beam/io/requestresponse/CallTest.java
 
b/sdks/java/io/rrio/src/test/java/org/apache/beam/io/requestresponse/CallTest.java
index 0e572bdd2d6..23ced30ada5 100644
--- 
a/sdks/java/io/rrio/src/test/java/org/apache/beam/io/requestresponse/CallTest.java
+++ 
b/sdks/java/io/rrio/src/test/java/org/apache/beam/io/requestresponse/CallTest.java
@@ -316,7 +316,7 @@ public class CallTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Request)) {
         return false;
       }
       Request request = (Request) o;
@@ -341,7 +341,7 @@ public class CallTest {
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof Response)) {
         return false;
       }
       Response response = (Response) o;
diff --git 
a/sdks/java/io/solace/src/test/java/org/apache/beam/sdk/io/solace/it/FixedCredentialsBasicAuthJcsmpSessionServiceFactory.java
 
b/sdks/java/io/solace/src/test/java/org/apache/beam/sdk/io/solace/it/FixedCredentialsBasicAuthJcsmpSessionServiceFactory.java
index 2fdee6f9138..516fc73dcac 100644
--- 
a/sdks/java/io/solace/src/test/java/org/apache/beam/sdk/io/solace/it/FixedCredentialsBasicAuthJcsmpSessionServiceFactory.java
+++ 
b/sdks/java/io/solace/src/test/java/org/apache/beam/sdk/io/solace/it/FixedCredentialsBasicAuthJcsmpSessionServiceFactory.java
@@ -47,7 +47,7 @@ public class 
FixedCredentialsBasicAuthJcsmpSessionServiceFactory extends Session
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof FixedCredentialsBasicAuthJcsmpSessionServiceFactory)) {
       return false;
     }
     FixedCredentialsBasicAuthJcsmpSessionServiceFactory that =
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/NexmarkConfiguration.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/NexmarkConfiguration.java
index 4bec553fdf6..77b57b641ea 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/NexmarkConfiguration.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/NexmarkConfiguration.java
@@ -596,10 +596,7 @@ public class NexmarkConfiguration implements Serializable {
     if (this == obj) {
       return true;
     }
-    if (obj == null) {
-      return false;
-    }
-    if (getClass() != obj.getClass()) {
+    if (!(obj instanceof NexmarkConfiguration)) {
       return false;
     }
     NexmarkConfiguration other = (NexmarkConfiguration) obj;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Auction.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Auction.java
index 6c28350ec77..147ca33506e 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Auction.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Auction.java
@@ -230,7 +230,7 @@ public class Auction implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Auction)) {
       return false;
     }
     Auction auction = (Auction) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionBid.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionBid.java
index 720f35156b6..46238263762 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionBid.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionBid.java
@@ -92,7 +92,7 @@ public class AuctionBid implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof AuctionBid)) {
       return false;
     }
     AuctionBid that = (AuctionBid) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionCount.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionCount.java
index 6cf3667d4d5..d47f9f5590a 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionCount.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionCount.java
@@ -81,7 +81,7 @@ public class AuctionCount implements KnownSize, Serializable {
     if (this == otherObject) {
       return true;
     }
-    if (otherObject == null || getClass() != otherObject.getClass()) {
+    if (!(otherObject instanceof AuctionCount)) {
       return false;
     }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionPrice.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionPrice.java
index 1c27fe8faa9..52e4e0c3642 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionPrice.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/AuctionPrice.java
@@ -81,7 +81,7 @@ public class AuctionPrice implements KnownSize, Serializable {
     if (this == otherObject) {
       return true;
     }
-    if (otherObject == null || getClass() != otherObject.getClass()) {
+    if (!(otherObject instanceof AuctionPrice)) {
       return false;
     }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Bid.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Bid.java
index 08a7a8d9b24..211d6ff3a61 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Bid.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Bid.java
@@ -151,7 +151,7 @@ public class Bid implements KnownSize, Serializable {
     if (this == otherObject) {
       return true;
     }
-    if (otherObject == null || getClass() != otherObject.getClass()) {
+    if (!(otherObject instanceof Bid)) {
       return false;
     }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/BidsPerSession.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/BidsPerSession.java
index 7c55b126fa7..a1e1bf895a2 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/BidsPerSession.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/BidsPerSession.java
@@ -94,7 +94,7 @@ public class BidsPerSession implements KnownSize, 
Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof BidsPerSession)) {
       return false;
     }
     BidsPerSession that = (BidsPerSession) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/CategoryPrice.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/CategoryPrice.java
index 0fcd8fc2876..ed3eb5a7530 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/CategoryPrice.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/CategoryPrice.java
@@ -104,7 +104,7 @@ public class CategoryPrice implements KnownSize, 
Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof CategoryPrice)) {
       return false;
     }
     CategoryPrice that = (CategoryPrice) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Done.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Done.java
index a07eea62fcb..c0ab6b23777 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Done.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Done.java
@@ -91,7 +91,7 @@ public class Done implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Done)) {
       return false;
     }
     Done done = (Done) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Event.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Event.java
index 067727fc1e3..56450794a6d 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Event.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Event.java
@@ -44,7 +44,7 @@ public class Event implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Event)) {
       return false;
     }
     Event event = (Event) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/IdNameReserve.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/IdNameReserve.java
index 8efcf5b4645..e6ac95357bd 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/IdNameReserve.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/IdNameReserve.java
@@ -107,7 +107,7 @@ public class IdNameReserve implements KnownSize, 
Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof IdNameReserve)) {
       return false;
     }
     IdNameReserve that = (IdNameReserve) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/NameCityStateId.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/NameCityStateId.java
index f5b5805549c..091fef56465 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/NameCityStateId.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/NameCityStateId.java
@@ -101,7 +101,7 @@ public class NameCityStateId implements KnownSize, 
Serializable {
     if (this == otherObject) {
       return true;
     }
-    if (otherObject == null || getClass() != otherObject.getClass()) {
+    if (!(otherObject instanceof NameCityStateId)) {
       return false;
     }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Person.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Person.java
index 80ca1fbc1a4..6c319d1e796 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Person.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/Person.java
@@ -193,7 +193,7 @@ public class Person implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof Person)) {
       return false;
     }
     Person person = (Person) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/SellerPrice.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/SellerPrice.java
index 85c88abc826..8cb69ec21fd 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/SellerPrice.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/model/SellerPrice.java
@@ -96,7 +96,7 @@ public class SellerPrice implements KnownSize, Serializable {
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof SellerPrice)) {
       return false;
     }
     SellerPrice that = (SellerPrice) o;
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/Query5.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/Query5.java
index 3e40f43d0a6..a2580b07da1 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/Query5.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/Query5.java
@@ -122,7 +122,7 @@ public class Query5 extends 
NexmarkQueryTransform<AuctionCount> {
         if (this == o) {
           return true;
         }
-        if (o == null || getClass() != o.getClass()) {
+        if (!(o instanceof Accum)) {
           return false;
         }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/WinningBids.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/WinningBids.java
index acb0383663c..f8e4cee25c8 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/WinningBids.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/queries/WinningBids.java
@@ -153,7 +153,7 @@ public class WinningBids extends 
PTransform<PCollection<Event>, PCollection<Auct
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof AuctionOrBidWindow)) {
         return false;
       }
       if (!super.equals(o)) {
@@ -396,7 +396,7 @@ public class WinningBids extends 
PTransform<PCollection<Event>, PCollection<Auct
     if (this == o) {
       return true;
     }
-    if (o == null || getClass() != o.getClass()) {
+    if (!(o instanceof WinningBids)) {
       return false;
     }
 
diff --git 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/Generator.java
 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/Generator.java
index 4174b587eea..f7f185e4671 100644
--- 
a/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/Generator.java
+++ 
b/sdks/java/testing/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/Generator.java
@@ -86,7 +86,7 @@ public class Generator implements 
Iterator<TimestampedValue<Event>>, Serializabl
       if (this == o) {
         return true;
       }
-      if (o == null || getClass() != o.getClass()) {
+      if (!(o instanceof NextEvent)) {
         return false;
       }
 


Reply via email to