JaegerSpan implements Span { @Override public synchronized JaegerSpan setTag(String key, String value) { return setTagAsObject(key, value); } protected  JaegerSpan(
      JaegerTracer tracer,
      String operationName,
      JaegerSpanContext context,
      long startTimeMicroseconds,
      long startTimeNanoTicks,
      boolean computeDurationViaNanoTicks,
      Map<String, Object> tags,
      List<Reference> references); long getStart(); boolean isFinished(); long getDuration(); JaegerTracer getTracer(); List<Reference> getReferences(); Map<String, Object> getTags(); @Override JaegerSpan setOperationName(String operationName); String getOperationName(); String getServiceName(); List<LogData> getLogs(); @Override JaegerSpan setBaggageItem(String key, String value); @Override String getBaggageItem(String key); @Override String toString(); @Override JaegerSpanContext context(); @Override void finish(); @Override void finish(long finishMicros); @Override synchronized JaegerSpan setTag(String key, String value); @Override synchronized JaegerSpan setTag(String key, boolean value); @Override synchronized JaegerSpan setTag(String key, Number value); @Override synchronized Span setTag(Tag<T> tag, T value); @Override JaegerSpan log(Map<String, ?> fields); @Override JaegerSpan log(long timestampMicroseconds, Map<String, ?> fields); @Override JaegerSpan log(String event); @Override JaegerSpan log(long timestampMicroseconds, String event);  }
@Test public void testSetTag() { jaegerSpan.setTag(new StringTag("stringTag"), "stringTagValue") .setTag(new IntTag("numberTag"), 1) .setTag(new BooleanTag("booleanTag"), true) .setTag(new AbstractTag<Object>("objectTag") { @Override public void set(Span span, Object tagValue) { } }, this); Map<String, Object> tags = jaegerSpan.getTags(); assertEquals("stringTagValue", tags.get("stringTag")); assertEquals(1, tags.get("numberTag")); assertEquals(true, tags.get("booleanTag")); assertEquals(this, tags.get("objectTag")); }