static class CIString implements Comparable { final S s; *(S *s) { assertNotNull(s); } // note that eq(s, cistring) is still false public boolean equals(Object o) { if (o instanceof CIString) return s.equalsIgnoreCase(((CIString) o).s); if (o instanceof String) // One-way interoperability! return s.equalsIgnoreCase((String) o); return false; } public int compareTo(CIString cis) { ret s.compareToIgnoreCase(cis.s); } public S toString() { ret s; } public S str() { ret s; } }