You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ke...@apache.org on 2019/03/25 20:39:28 UTC

[beam] branch master updated: [BEAM-3279] Deprecate and remove Coder.consistentWithEquals (#8071)

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

kenn 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 43db80d  [BEAM-3279] Deprecate and remove Coder.consistentWithEquals (#8071)
43db80d is described below

commit 43db80deca44273716c500520439aaa4e48688b4
Author: Alexander Savchenko <sa...@gmail.com>
AuthorDate: Mon Mar 25 23:39:09 2019 +0300

    [BEAM-3279] Deprecate and remove Coder.consistentWithEquals (#8071)
---
 .../apache/beam/sdk/coders/BigDecimalCoder.java    | 16 ++++-----
 .../beam/sdk/coders/BigEndianIntegerCoder.java     | 16 ++++-----
 .../apache/beam/sdk/coders/BigEndianLongCoder.java | 16 ++++-----
 .../beam/sdk/coders/BigEndianShortCoder.java       | 16 ++++-----
 .../apache/beam/sdk/coders/BigIntegerCoder.java    | 16 ++++-----
 .../org/apache/beam/sdk/coders/BitSetCoder.java    |  5 +--
 .../org/apache/beam/sdk/coders/BooleanCoder.java   | 11 ++++---
 .../java/org/apache/beam/sdk/coders/ByteCoder.java | 16 ++++-----
 .../java/org/apache/beam/sdk/coders/Coder.java     | 13 +++++---
 .../org/apache/beam/sdk/coders/DoubleCoder.java    | 16 ++++-----
 .../org/apache/beam/sdk/coders/DurationCoder.java  | 16 ++++-----
 .../org/apache/beam/sdk/coders/FloatCoder.java     | 16 ++++-----
 .../org/apache/beam/sdk/coders/InstantCoder.java   | 16 ++++-----
 .../java/org/apache/beam/sdk/coders/RowCoder.java  | 11 ++++---
 .../apache/beam/sdk/coders/SerializableCoder.java  |  5 ---
 .../apache/beam/sdk/coders/StringUtf8Coder.java    |  6 ++++
 .../org/apache/beam/sdk/coders/VarIntCoder.java    | 16 ++++-----
 .../org/apache/beam/sdk/coders/VarLongCoder.java   | 16 ++++-----
 .../beam/sdk/coders/BigDecimalCoderTest.java       |  8 +++++
 .../beam/sdk/coders/BigEndianIntegerCoderTest.java |  8 +++++
 .../beam/sdk/coders/BigEndianLongCoderTest.java    |  8 +++++
 .../beam/sdk/coders/BigIntegerCoderTest.java       |  8 +++++
 .../apache/beam/sdk/coders/BitSetCoderTest.java    |  8 +++++
 .../apache/beam/sdk/coders/BooleanCoderTest.java   | 37 +++++++++++++++++++++
 .../org/apache/beam/sdk/coders/ByteCoderTest.java  |  8 +++++
 .../apache/beam/sdk/coders/CoderRegistryTest.java  |  5 ---
 .../apache/beam/sdk/coders/DoubleCoderTest.java    |  8 +++++
 .../apache/beam/sdk/coders/DurationCoderTest.java  |  8 +++++
 .../org/apache/beam/sdk/coders/FloatCoderTest.java | 38 ++++++++++++++++++++++
 .../apache/beam/sdk/coders/InstantCoderTest.java   |  8 +++++
 .../org/apache/beam/sdk/coders/KvCoderTest.java    |  8 +++++
 .../org/apache/beam/sdk/coders/ListCoderTest.java  | 22 +++++--------
 .../org/apache/beam/sdk/coders/MapCoderTest.java   | 22 +++++--------
 .../org/apache/beam/sdk/coders/RowCoderTest.java   | 11 +++++++
 .../beam/sdk/coders/SerializableCoderTest.java     |  8 +++++
 .../beam/sdk/coders/StringUtf8CoderTest.java       |  8 +++++
 .../beam/sdk/coders/StructuredCoderTest.java       | 10 ------
 .../apache/beam/sdk/coders/VarIntCoderTest.java    |  8 +++++
 .../apache/beam/sdk/coders/VarLongCoderTest.java   |  8 +++++
 39 files changed, 316 insertions(+), 184 deletions(-)

diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigDecimalCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigDecimalCoder.java
index e705120..5c1fccd 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigDecimalCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigDecimalCoder.java
@@ -82,16 +82,6 @@ public class BigDecimalCoder extends AtomicCoder<BigDecimal> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, because {@link #getEncodedElementByteSize} runs in constant time.
    */
   @Override
@@ -112,4 +102,10 @@ public class BigDecimalCoder extends AtomicCoder<BigDecimal> {
     return VAR_INT_CODER.getEncodedElementByteSize(value.scale())
         + BIG_INT_CODER.getEncodedElementByteSize(value.unscaledValue());
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(BigDecimal value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianIntegerCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianIntegerCoder.java
index 680901a..30918ad 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianIntegerCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianIntegerCoder.java
@@ -65,16 +65,6 @@ public class BigEndianIntegerCoder extends AtomicCoder<Integer> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, because {@link #getEncodedElementByteSize} runs in constant time.
    */
   @Override
@@ -99,4 +89,10 @@ public class BigEndianIntegerCoder extends AtomicCoder<Integer> {
     }
     return 4;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Integer value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianLongCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianLongCoder.java
index c13bacb..158ff8f 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianLongCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianLongCoder.java
@@ -65,16 +65,6 @@ public class BigEndianLongCoder extends AtomicCoder<Long> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, since {@link #getEncodedElementByteSize} returns a constant.
    */
   @Override
@@ -99,4 +89,10 @@ public class BigEndianLongCoder extends AtomicCoder<Long> {
     }
     return 8;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Long value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianShortCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianShortCoder.java
index 2ea605f..af47d28 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianShortCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigEndianShortCoder.java
@@ -65,16 +65,6 @@ public class BigEndianShortCoder extends AtomicCoder<Short> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, because {@link #getEncodedElementByteSize} runs in constant time.
    */
   @Override
@@ -99,4 +89,10 @@ public class BigEndianShortCoder extends AtomicCoder<Short> {
     }
     return 2;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Short value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigIntegerCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigIntegerCoder.java
index a878e6c..cfbf486 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigIntegerCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BigIntegerCoder.java
@@ -72,16 +72,6 @@ public class BigIntegerCoder extends AtomicCoder<BigInteger> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, because {@link #getEncodedElementByteSize} runs in constant time.
    */
   @Override
@@ -99,4 +89,10 @@ public class BigIntegerCoder extends AtomicCoder<BigInteger> {
     checkNotNull(value, String.format("cannot encode a null %s", BigInteger.class.getSimpleName()));
     return BYTE_ARRAY_CODER.getEncodedElementByteSize(value.toByteArray());
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(BigInteger value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BitSetCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BitSetCoder.java
index 27d8d5b..7dd5abc 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BitSetCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BitSetCoder.java
@@ -63,8 +63,9 @@ public class BitSetCoder extends AtomicCoder<BitSet> {
         this, "BitSetCoder requires its ByteArrayCoder to be deterministic.", BYTE_ARRAY_CODER);
   }
 
+  /** {@inheritDoc} */
   @Override
-  public boolean consistentWithEquals() {
-    return true;
+  public Object structuralValue(BitSet value) {
+    return value;
   }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BooleanCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BooleanCoder.java
index e7f7543..a7b6fcf 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BooleanCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/BooleanCoder.java
@@ -43,11 +43,6 @@ public class BooleanCoder extends AtomicCoder<Boolean> {
   }
 
   @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  @Override
   public boolean isRegisterByteSizeObserverCheap(Boolean value) {
     return true;
   }
@@ -56,4 +51,10 @@ public class BooleanCoder extends AtomicCoder<Boolean> {
   protected long getEncodedElementByteSize(Boolean value) throws Exception {
     return 1;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Boolean value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ByteCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ByteCoder.java
index 08a7cb6..cd735f1 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ByteCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/ByteCoder.java
@@ -74,16 +74,6 @@ public class ByteCoder extends AtomicCoder<Byte> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. {@link ByteCoder#getEncodedElementByteSize} returns a constant.
    */
   @Override
@@ -108,4 +98,10 @@ public class ByteCoder extends AtomicCoder<Byte> {
     }
     return 1;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Byte value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/Coder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/Coder.java
index 1ba5537..40ec138 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/Coder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/Coder.java
@@ -210,15 +210,20 @@ public abstract class Coder<T> implements Serializable {
   /**
    * Returns {@code true} if this {@link Coder} is injective with respect to {@link Objects#equals}.
    *
+   * <p>By default, returns false, assuming that the encoding may differ from {@link Objects#equals}
+   * in arbitrary ways.
+   *
    * <p>Whenever the encoded bytes of two values are equal, then the original values are equal
    * according to {@code Objects.equals()}. Note that this is well-defined for {@code null}.
    *
-   * <p>This condition is most notably false for arrays. More generally, this condition is false
-   * whenever {@code equals()} compares object identity, rather than performing a
-   * semantic/structural comparison.
+   * <p>This condition is most notably false for arrays, where encoded equality does not correspond
+   * to Java equality. More generally, this condition is false whenever {@code equals()} compares
+   * object identity, rather than performing a semantic/structural comparison.
    *
-   * <p>By default, returns false.
+   * @deprecated For coders that are injective with respect to {@link Objects#equals}, override
+   *     {@link #structuralValue(Object)} to return the input element directly.
    */
+  @Deprecated
   public boolean consistentWithEquals() {
     return false;
   }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DoubleCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DoubleCoder.java
index 7cc9dd2..ba9130e 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DoubleCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DoubleCoder.java
@@ -75,16 +75,6 @@ public class DoubleCoder extends AtomicCoder<Double> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. {@link DoubleCoder#getEncodedElementByteSize} returns a constant.
    */
   @Override
@@ -109,4 +99,10 @@ public class DoubleCoder extends AtomicCoder<Double> {
     }
     return 8;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Double value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DurationCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DurationCoder.java
index 3ddc4ee..1b56677 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DurationCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/DurationCoder.java
@@ -75,16 +75,6 @@ public class DurationCoder extends AtomicCoder<ReadableDuration> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}, because it is cheap to ascertain the byte size of a long.
    */
   @Override
@@ -102,4 +92,10 @@ public class DurationCoder extends AtomicCoder<ReadableDuration> {
   public TypeDescriptor<ReadableDuration> getEncodedTypeDescriptor() {
     return TYPE_DESCRIPTOR;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(ReadableDuration value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/FloatCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/FloatCoder.java
index b131c4e..b320193 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/FloatCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/FloatCoder.java
@@ -75,16 +75,6 @@ public class FloatCoder extends AtomicCoder<Float> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. {@link FloatCoder#getEncodedElementByteSize} returns a constant.
    */
   @Override
@@ -109,4 +99,10 @@ public class FloatCoder extends AtomicCoder<Float> {
     }
     return 4;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Float value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/InstantCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/InstantCoder.java
index 2a94f07..8d93f58 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/InstantCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/InstantCoder.java
@@ -85,16 +85,6 @@ public class InstantCoder extends AtomicCoder<Instant> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. This coder is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. The byte size for a big endian long is a constant.
    */
   @Override
@@ -114,4 +104,10 @@ public class InstantCoder extends AtomicCoder<Instant> {
   public TypeDescriptor<Instant> getEncodedTypeDescriptor() {
     return TYPE_DESCRIPTOR;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Instant value) {
+    return value;
+  }
 }
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 c4f753f..d8f4ef9 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
@@ -134,11 +134,6 @@ public class RowCoder extends CustomCoder<Row> {
     Coder.verifyDeterministic(this, "All fields must have deterministic encoding", coders);
   }
 
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
   /** Returns the coder used for a given primitive type. */
   public static <T> Coder<T> coderForFieldType(FieldType fieldType) {
     switch (fieldType.getTypeName()) {
@@ -203,4 +198,10 @@ public class RowCoder extends CustomCoder<Row> {
         return ESTIMATED_FIELD_SIZES.get(typeDescriptor.getTypeName());
     }
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Row value) {
+    return value;
+  }
 }
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 ea84dbd..d682345 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
@@ -72,11 +72,6 @@ public class SerializableCoder<T extends Serializable> extends CustomCoder<T> {
     return new SerializableCoder<>(clazz, type);
   }
 
-  @Override
-  public boolean consistentWithEquals() {
-    return false;
-  }
-
   /**
    * The structural value of the object is the object itself. The {@link SerializableCoder} should
    * be only used for objects with a proper {@link Object#equals} implementation.
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringUtf8Coder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringUtf8Coder.java
index 4414cb3..cb52c9c 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringUtf8Coder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/StringUtf8Coder.java
@@ -138,4 +138,10 @@ public class StringUtf8Coder extends AtomicCoder<String> {
     int size = Utf8.encodedLength(value);
     return (long) VarInt.getLength(size) + size;
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(String value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarIntCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarIntCoder.java
index c16ed77..0bde3ae 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarIntCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarIntCoder.java
@@ -68,16 +68,6 @@ public class VarIntCoder extends AtomicCoder<Integer> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. {@link VarIntCoder} is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. {@link #getEncodedElementByteSize} is cheap.
    */
   @Override
@@ -97,4 +87,10 @@ public class VarIntCoder extends AtomicCoder<Integer> {
     }
     return VarInt.getLength(value.longValue());
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Integer value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarLongCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarLongCoder.java
index c739253..14fb1c1 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarLongCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/VarLongCoder.java
@@ -74,16 +74,6 @@ public class VarLongCoder extends StructuredCoder<Long> {
   /**
    * {@inheritDoc}
    *
-   * @return {@code true}. {@link VarLongCoder} is injective.
-   */
-  @Override
-  public boolean consistentWithEquals() {
-    return true;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
    * @return {@code true}. {@link #getEncodedElementByteSize} is cheap.
    */
   @Override
@@ -103,4 +93,10 @@ public class VarLongCoder extends StructuredCoder<Long> {
     }
     return VarInt.getLength(value);
   }
+
+  /** {@inheritDoc} */
+  @Override
+  public Object structuralValue(Long value) {
+    return value;
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigDecimalCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigDecimalCoderTest.java
index 4acc0bc..78ebad6 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigDecimalCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigDecimalCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.math.BigDecimal;
@@ -113,4 +114,11 @@ public class BigDecimalCoderTest {
 
     CoderUtils.encodeToBase64(TEST_CODER, null);
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    BigDecimal expected = new BigDecimal(123.23);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianIntegerCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianIntegerCoderTest.java
index b9730ad..7fc07e4 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianIntegerCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianIntegerCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -75,4 +76,11 @@ public class BigEndianIntegerCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Integer.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Integer expected = 223;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianLongCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianLongCoderTest.java
index 873cac8..d7b1de5 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianLongCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigEndianLongCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -97,4 +98,11 @@ public class BigEndianLongCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Long.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Long expected = 223L;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigIntegerCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigIntegerCoderTest.java
index 37ce59d..4d51f51 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigIntegerCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BigIntegerCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.math.BigInteger;
@@ -88,4 +89,11 @@ public class BigIntegerCoderTest {
 
     CoderUtils.encodeToBase64(TEST_CODER, null);
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    BigInteger expected = BigInteger.valueOf(223L);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BitSetCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BitSetCoderTest.java
index 7d87303..c3c9f3a 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BitSetCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BitSetCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -98,4 +99,11 @@ public class BitSetCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(BitSet.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    BitSet expected = BitSet.valueOf(new byte[] {0xd, 0x3});
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BooleanCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BooleanCoderTest.java
new file mode 100644
index 0000000..d598cb8
--- /dev/null
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/BooleanCoderTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.beam.sdk.coders;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link BooleanCoder}. */
+@RunWith(JUnit4.class)
+public class BooleanCoderTest {
+  private static final Coder<Boolean> TEST_CODER = BooleanCoder.of();
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Boolean expected = Boolean.TRUE;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
+}
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ByteCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ByteCoderTest.java
index ad11eb8..77a3784 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ByteCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ByteCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -74,4 +75,11 @@ public class ByteCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Byte.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Byte expected = 2;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java
index 3f9d917..d5427f6 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java
@@ -384,11 +384,6 @@ public class CoderRegistryTest {
     public void verifyDeterministic() {}
 
     @Override
-    public boolean consistentWithEquals() {
-      return true;
-    }
-
-    @Override
     public Object structuralValue(MyValue value) {
       return value;
     }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DoubleCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DoubleCoderTest.java
index 3e7dd4a..a4ed39c 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DoubleCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DoubleCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -99,4 +100,11 @@ public class DoubleCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Double.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Double expected = 23.32;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DurationCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DurationCoderTest.java
index 9959452..5287466 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DurationCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/DurationCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -86,4 +87,11 @@ public class DurationCoderTest {
     assertThat(
         TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(ReadableDuration.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    ReadableDuration expected = Duration.millis(3_000);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/FloatCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/FloatCoderTest.java
new file mode 100644
index 0000000..5d71480
--- /dev/null
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/FloatCoderTest.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.beam.sdk.coders;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link FloatCoder}. */
+@RunWith(JUnit4.class)
+public class FloatCoderTest {
+
+  private static final Coder<Float> TEST_CODER = FloatCoder.of();
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Float expected = 23.45F;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
+}
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/InstantCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/InstantCoderTest.java
index ec00fb5..e70dfb0 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/InstantCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/InstantCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.ArrayList;
@@ -113,4 +114,11 @@ public class InstantCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Instant.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Instant expected = new Instant(234L);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/KvCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/KvCoderTest.java
index 3d75eb2..8e860f7 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/KvCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/KvCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -128,4 +129,11 @@ public class KvCoderTest {
         new TypeDescriptor<KV<String, Integer>>() {};
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(typeDescriptor));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    KV<String, Integer> expected = KV.of("test", 10);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ListCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ListCoderTest.java
index e793e40..daeaa3f 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ListCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/ListCoderTest.java
@@ -17,9 +17,8 @@
  */
 package org.apache.beam.sdk.coders;
 
-import static junit.framework.TestCase.assertTrue;
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.ArrayList;
@@ -120,20 +119,15 @@ public class ListCoderTest {
   }
 
   @Test
-  public void testNotConsistentWithEquals() {
-    ListCoder<byte[]> coder = ListCoder.of(ByteArrayCoder.of());
-    assertFalse(coder.consistentWithEquals());
-  }
-
-  @Test
-  public void testConsistentWithEquals() {
-    ListCoder<Integer> coder = ListCoder.of(VarIntCoder.of());
-    assertTrue(coder.consistentWithEquals());
-  }
-
-  @Test
   public void testEncodedTypeDescriptor() throws Exception {
     TypeDescriptor<List<Integer>> typeDescriptor = new TypeDescriptor<List<Integer>>() {};
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(typeDescriptor));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValueForConsistType() {
+    List<Integer> expected = Arrays.asList(1, 2, 3, 4);
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/MapCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/MapCoderTest.java
index 74dfa7b..33dbc38 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/MapCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/MapCoderTest.java
@@ -18,9 +18,8 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -94,21 +93,16 @@ public class MapCoderTest {
   }
 
   @Test
-  public void testNotConsistentWithEquals() {
-    MapCoder<Integer, byte[]> coder = MapCoder.of(VarIntCoder.of(), ByteArrayCoder.of());
-    assertFalse(coder.consistentWithEquals());
-  }
-
-  @Test
-  public void testConsistentWithEquals() {
-    MapCoder<Integer, Integer> coder = MapCoder.of(VarIntCoder.of(), VarIntCoder.of());
-    assertTrue(coder.consistentWithEquals());
-  }
-
-  @Test
   public void testEncodedTypeDescriptor() throws Exception {
     TypeDescriptor<Map<Integer, String>> typeDescriptor =
         new TypeDescriptor<Map<Integer, String>>() {};
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(typeDescriptor));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValueForConsistsType() {
+    Map<Integer, String> expected = Collections.singletonMap(10, "test");
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/RowCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/RowCoderTest.java
index f0d814c..4734b7d 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/RowCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/RowCoderTest.java
@@ -17,6 +17,8 @@
  */
 package org.apache.beam.sdk.coders;
 
+import static org.junit.Assert.assertEquals;
+
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Collections;
@@ -235,4 +237,13 @@ public class RowCoderTest {
     Row row = Row.withSchema(schema).addValue(Collections.singletonMap(1, null)).build();
     CoderProperties.coderDecodeEncodeEqual(RowCoder.of(schema), row);
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Schema schema = Schema.builder().addField("field", FieldType.INT32).build();
+    Row expected = Row.withSchema(schema).addValue(2123).build();
+    Coder<Row> rowCoder = RowCoder.of(schema);
+    Object actual = rowCoder.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
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 70817c0..cae9392 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
@@ -360,4 +360,12 @@ public class SerializableCoderTest implements Serializable {
 
     coder.encode("", outputStream);
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Coder<String> coder = SerializableCoder.of(String.class);
+    String expected = "serTest";
+    Object actual = coder.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StringUtf8CoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StringUtf8CoderTest.java
index d85f2d5..e9ee769 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StringUtf8CoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StringUtf8CoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -87,4 +88,11 @@ public class StringUtf8CoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(String.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    String expected = "testStructuralValue";
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StructuredCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StructuredCoderTest.java
index 396e272..ca2e7cc 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StructuredCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/StructuredCoderTest.java
@@ -75,11 +75,6 @@ public class StructuredCoderTest {
 
     @Override
     public void verifyDeterministic() throws NonDeterministicException {}
-
-    @Override
-    public boolean consistentWithEquals() {
-      return true;
-    }
   }
 
   /** A boxed {@code int} with {@code equals()} that compares object identity. */
@@ -133,11 +128,6 @@ public class StructuredCoderTest {
 
     @Override
     public void verifyDeterministic() throws NonDeterministicException {}
-
-    @Override
-    public boolean consistentWithEquals() {
-      return false;
-    }
   }
 
   /**
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarIntCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarIntCoderTest.java
index 718c9b6..d111bcd 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarIntCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarIntCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -74,4 +75,11 @@ public class VarIntCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Integer.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Integer expected = 2239;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarLongCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarLongCoderTest.java
index ca84262..8e538b7 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarLongCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/VarLongCoderTest.java
@@ -18,6 +18,7 @@
 package org.apache.beam.sdk.coders;
 
 import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -97,4 +98,11 @@ public class VarLongCoderTest {
   public void testEncodedTypeDescriptor() throws Exception {
     assertThat(TEST_CODER.getEncodedTypeDescriptor(), equalTo(TypeDescriptor.of(Long.class)));
   }
+
+  @Test
+  public void testStructuralValueReturnTheSameValue() {
+    Long expected = 223L;
+    Object actual = TEST_CODER.structuralValue(expected);
+    assertEquals(expected, actual);
+  }
 }