CaseInsensitiveString não é uma má idéia, depende do seu uso, desde que você não espere que ele funcione junto com String.
Você pode converter um CaseInsensitiveString em uma String ou vice-versa, e é tudo o que você deve fazer.
Problema acontecerá se você tentar fazer algo como
class CaseInsensitiveString {
private String value;
public boolean equals(Object o) {
// .....
if (o instanceof String) {
return value.equalsIgnoreCase((String) o);
}
}
}
Você está fadado ao fracasso se tornar sua CaseInsensitiveString corporativa com uma String normal, porque estará violando a simetria e a transitividade por equals () (e outros contratos)
No entanto, pergunte a si mesmo: em qual caso você realmente precisa deste CaseInsensitiveString que não é adequado para usar String.CASE_INSENSITIVE_ORDER? Aposto que não muitos. Tenho certeza de que vale a pena ter essa aula especial, mas pergunte a si mesmo primeiro.