On Fri, Mar 5, 2010 at 11:12 AM, Jörg Schaible <[email protected]> wrote:
> Henri Yandell wrote at Freitag, 5. März 2010 10:32:
>
>> Thinking further on moving StringUtils to CharSequence, I'd like to
>> take the String left(String, int) method as an example. It depends on
>> substring(int, int), so is entirely possibly to move over to
>> subSequence(int, int).
>>
>> Hypothetical new method:
>>
>> CharSequence left(CharSequence, int)
>>
>> The downside here is that users currently storing this in a String are
>> going to have to cast. Generics to the rescue.
>>
>> <T extends CharSequence> T left(T, int)
>>
>> This hits two problems:
>>
>> 1) EMPTY is returned when the int is less than 0; EMPTY is a String and
>> not T.
>> 2) subSequence returns CharSequence and not T.
>
> Because you do not necessarily get the same type. The API gives room for
> optimized types.
>
>> I could add a wrapper method to make Strings nicer:
>>
>> public static String left(String str, int len) {
>> if (str == null) {
>> return null;
>> }
>> return left( (CharSequence) str, len).toString();
>> }
>>
>> But that doesn't help the StringBuffer/StrBuilder/StringBuilder user;
>> they still get a sucky API.
>>
>> Am I missing anything obvious here, or should I give up the ghost on
>> trying to take these methods to CharSequence APIs?
>
> Since the most important implementations (String/StringBuilder/StringBuffer)
> all return effectively a String,
Hmmm - I expected/assumed it would return the same type.
Niall
> you may actually return one also:
>
> public static String left(CharSequence str, int len) {
> if (str == null) {
> return null;
> }
> return str.subSequence(0, len).toString();
> }
>
> Opinions?
>
> - Jörg
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]