### Question:
MetricName implements Comparable<MetricName> { @Override public int compareTo(MetricName o) { if (o == null) { return -1; } int c = compareName(key, o.getKey()); if (c != 0) { return c; } return compareTags(tags, o.getTags()); } MetricName();  MetricName(String key);  MetricName(String key, Map<String, String> tags);  MetricName(String key, MetricLevel level);  MetricName(String key, Map<String, String> tags, MetricLevel level); String getKey(); Map<String, String> getTags(); MetricLevel getMetricLevel(); MetricName level(MetricLevel level); MetricName resolve(String p); MetricName resolve(String p, boolean inheritTags); MetricName tag(Map<String, String> add); MetricName tag(String... pairs); static MetricName join(MetricName... parts); static MetricName build(String... parts); @Override String toString(); @Override int hashCode(); @Override boolean equals(Object obj); @Override int compareTo(MetricName o); static final String SEPARATOR; static final Map<String, String> EMPTY_TAGS; static final MetricName EMPTY; }### Answer:
@Test public void testCompareTo() { final MetricName a = MetricName.EMPTY.tag("foo", "bar"); final MetricName b = MetricName.EMPTY.tag("foo", "baz"); Assertions.assertTrue(a.compareTo(b) < 0); Assertions.assertTrue(b.compareTo(a) > 0); Assertions.assertTrue(b.compareTo(b) == 0); Assertions.assertTrue(b.resolve("key").compareTo(b) < 0); Assertions.assertTrue(b.compareTo(b.resolve("key")) > 0); }