### Question:
MetricName implements Comparable<MetricName> { public MetricName tag(Map<String, String> add) { final Map<String, String> tags = new HashMap<String, String>(add); tags.putAll(this.tags); return new MetricName(key, tags, level); } 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 testTaggedNotPairs() { Assertions.assertThrows(IllegalArgumentException.class, () -> MetricName.EMPTY.tag("foo")); }
@Test public void testTaggedNotPairs2() { Assertions.assertThrows(IllegalArgumentException.class, () -> MetricName.EMPTY.tag("foo", "bar", "baz")); }