### Question:
DelegatingSpanData implements SpanData { @Override public final boolean equals(Object o) { if (o == this) { return true; } if (o instanceof SpanData) { SpanData that = (SpanData) o; return getTraceId().equals(that.getTraceId()) && getSpanId().equals(that.getSpanId()) && isSampled() == that.isSampled() && getTraceState().equals(that.getTraceState()) && getParentSpanId().equals(that.getParentSpanId()) && getResource().equals(that.getResource()) && getInstrumentationLibraryInfo().equals(that.getInstrumentationLibraryInfo()) && getName().equals(that.getName()) && getKind().equals(that.getKind()) && getStartEpochNanos() == that.getStartEpochNanos() && getAttributes().equals(that.getAttributes()) && getEvents().equals(that.getEvents()) && getLinks().equals(that.getLinks()) && getStatus().equals(that.getStatus()) && getEndEpochNanos() == that.getEndEpochNanos() && getHasRemoteParent() == that.getHasRemoteParent() && getHasEnded() == that.getHasEnded() && getTotalRecordedEvents() == that.getTotalRecordedEvents() && getTotalRecordedLinks() == that.getTotalRecordedLinks() && getTotalAttributeCount() == that.getTotalAttributeCount(); } return false; } protected  DelegatingSpanData(SpanData delegate); @Override String getTraceId(); @Override String getSpanId(); @Override boolean isSampled(); @Override TraceState getTraceState(); @Override String getParentSpanId(); @Override Resource getResource(); @Override InstrumentationLibraryInfo getInstrumentationLibraryInfo(); @Override String getName(); @Override Kind getKind(); @Override long getStartEpochNanos(); @Override ReadableAttributes getAttributes(); @Override List<Event> getEvents(); @Override List<Link> getLinks(); @Override Status getStatus(); @Override long getEndEpochNanos(); @Override boolean getHasRemoteParent(); @Override boolean getHasEnded(); @Override int getTotalRecordedEvents(); @Override int getTotalRecordedLinks(); @Override int getTotalAttributeCount(); @Override final boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void equals() { SpanData spanData = createBasicSpanBuilder().build(); SpanData noopWrapper = new NoOpDelegatingSpanData(spanData); SpanData spanDataWithClientType = new SpanDataWithClientType(spanData); assertThat(noopWrapper).isEqualTo(spanData); assertThat(spanData).isNotEqualTo(noopWrapper); new EqualsTester() .addEqualityGroup(noopWrapper) .addEqualityGroup(spanDataWithClientType) .testEquals(); assertThat(spanDataWithClientType.getAttributes().get(CLIENT_TYPE_KEY)).isEqualTo("unknown"); }