@java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
      return true;
    }
    if (!(obj instanceof com.google.devtools.cloudtrace.v2.Span)) {
      return super.equals(obj);
    }
    com.google.devtools.cloudtrace.v2.Span other = (com.google.devtools.cloudtrace.v2.Span) obj;

    if (!getName().equals(other.getName())) return false;
    if (!getSpanId().equals(other.getSpanId())) return false;
    if (!getParentSpanId().equals(other.getParentSpanId())) return false;
    if (hasDisplayName() != other.hasDisplayName()) return false;
    if (hasDisplayName()) {
      if (!getDisplayName().equals(other.getDisplayName())) return false;
    }
    if (hasStartTime() != other.hasStartTime()) return false;
    if (hasStartTime()) {
      if (!getStartTime().equals(other.getStartTime())) return false;
    }
    if (hasEndTime() != other.hasEndTime()) return false;
    if (hasEndTime()) {
      if (!getEndTime().equals(other.getEndTime())) return false;
    }
    if (hasAttributes() != other.hasAttributes()) return false;
    if (hasAttributes()) {
      if (!getAttributes().equals(other.getAttributes())) return false;
    }
    if (hasStackTrace() != other.hasStackTrace()) return false;
    if (hasStackTrace()) {
      if (!getStackTrace().equals(other.getStackTrace())) return false;
    }
    if (hasTimeEvents() != other.hasTimeEvents()) return false;
    if (hasTimeEvents()) {
      if (!getTimeEvents().equals(other.getTimeEvents())) return false;
    }
    if (hasLinks() != other.hasLinks()) return false;
    if (hasLinks()) {
      if (!getLinks().equals(other.getLinks())) return false;
    }
    if (hasStatus() != other.hasStatus()) return false;
    if (hasStatus()) {
      if (!getStatus().equals(other.getStatus())) return false;
    }
    if (hasSameProcessAsParentSpan() != other.hasSameProcessAsParentSpan()) return false;
    if (hasSameProcessAsParentSpan()) {
      if (!getSameProcessAsParentSpan().equals(other.getSameProcessAsParentSpan())) return false;
    }
    if (hasChildSpanCount() != other.hasChildSpanCount()) return false;
    if (hasChildSpanCount()) {
      if (!getChildSpanCount().equals(other.getChildSpanCount())) return false;
    }
    if (spanKind_ != other.spanKind_) return false;
    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
    return true;
  }
<pre>
Optional. Distinguishes between spans generated in a particular context.
For example, two spans with the same name may be distinguished using
`CLIENT` (caller) and `SERVER` (callee) to identify an RPC call.
</pre>

<code>
.google.devtools.cloudtrace.v2.Span.SpanKind span_kind = 14 [(.google.api.field_behavior) = OPTIONAL];
</code>

@return The spanKind.
java-trace/proto-google-cloud-trace-v2/src/main/java/com/google/devtools/cloudtrace/v2/Span.java