Perhaps <T extends CharSequence>?

ajs6f

> On Feb 23, 2018, at 12:12 PM, Gary Gregory <garydgreg...@gmail.com> wrote:
> 
> On Fri, Feb 23, 2018 at 10:05 AM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
> 
>> 
>> 
>> On Fri, Feb 23, 2018 at 10:04 AM, Gary Gregory <garydgreg...@gmail.com>
>> wrote:
>> 
>>> 
>>> 
>>> On Fri, Feb 23, 2018 at 7:03 AM, Matt Benson <mben...@apache.org> wrote:
>>> 
>>>> On Feb 23, 2018 4:26 AM, "sebb" <seb...@gmail.com> wrote:
>>>> 
>>>> On 23 February 2018 at 00:41, Gary Gregory <garydgreg...@gmail.com>
>>>> wrote:
>>>>> On Thu, Feb 22, 2018 at 4:27 PM, sebb <seb...@gmail.com> wrote:
>>>>> 
>>>>>> On 22 February 2018 at 23:15, Gary Gregory <garydgreg...@gmail.com>
>>>> wrote:
>>>>>>> On Thu, Feb 22, 2018 at 4:11 PM, sebb <seb...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> On 22 February 2018 at 22:27, Gary Gregory <garydgreg...@gmail.com
>>>>> 
>>>>>> wrote:
>>>>>>>>> Use your imagination ;-)
>>>>>>>> 
>>>>>>>> What would the new code look like?
>>>>>> 
>>>>>> I mean the user code before and after the enum is introduced.
>>>>>> 
>>>>> 
>>>>> I don't have code for the _before_ since I wrote the enum to avoid it.
>>>>> 
>>>>> I have a different util class that gets called like this:
>>>>> 
>>>>> HexDump(byte[] data, LetterCase letterCase, more details...)
>>>> 
>>>> The above is only using the enum as a way to provide the requested
>>>> type of transform.
>>>> 
>>>> The important bit is the code that uses the enum to do the transform.
>>>> 
>>>> 
>>>> Obviously the method body would call #toCaseString() passing a String and
>>>> Locale as arguments. This question feels like trolling, as does the
>>>> insinuation that true/false *might not* be less clear in intent than
>>>> UPPER/LOWER, or vice versa as, again, we don't know what the hypothetical
>>>> API author was thinking in the case of boolean. WTH
>>>> 
>>> 
>>> Thanks Matt for pointing that out. The comment did feel trollish to me as
>>> well but I choose not to engage. Aside from that I really like Sebb's
>>> contributions to our community, his diligence and attention to detail.
>>> I did not think I needed to make some pedantic point about an enum being
>>> much better than a boolean to express letter case or toggles in general.
>>> 
>>> 
>>>> The comment about Java 8 is fine as far as it goes, but doesn't really
>>>> invalidate this as the method supplied can easily be used as a
>>>> BiFunction.
>>>> Gary, I'm thinking you might as well "underload" the method to pass the
>>>> default Locale to the two-argument variant so then you also implement
>>>> Function in the simple case. Then I'm sold. For a bonus you might provide
>>>> char method variants as well.
>>>> 
>>> 
>>> OK, sounds good. Like this then:
>>> [https://pastebin.com/mJw2tDHj]
>>> 
>> 
>> Without the @author tag of course.
>> 
> 
> There is also CharBuffer... I only have use for String.
> 
> Gary
> 
> 
>> 
>> G
>> 
>>> 
>>> import java.util.Locale;
>>> 
>>> /**
>>> * Enumerates letter cases and converts strings.
>>> *
>>> * @author <a href="mailto:ggreg...@rocketsoftware.com";>Gary Gregory</a>
>>> */
>>> public enum LetterCase {
>>> 
>>>    LOWER {
>>>        @Override
>>>        public char[] toCaseString(final char[] source, final Locale
>>> locale) {
>>>            return String.valueOf(source).toLower
>>> Case(locale).toCharArray();
>>>        }
>>> 
>>>        @Override
>>>        public String toCaseString(final String source, final Locale
>>> locale) {
>>>            return source.toLowerCase(locale);
>>>        }
>>> 
>>>    },
>>>    UPPER {
>>>        @Override
>>>        public char[] toCaseString(final char[] source, final Locale
>>> locale) {
>>>            return String.valueOf(source).toUpper
>>> Case(locale).toCharArray();
>>>        }
>>> 
>>>        @Override
>>>        public String toCaseString(final String source, final Locale
>>> locale) {
>>>            return source.toUpperCase(locale);
>>>        }
>>>    };
>>> 
>>>    /**
>>>     * Converts from the given {@code source} string to the case
>>> specified by this enum using the default {@code locale}.
>>>     *
>>>     * @param source
>>>     *            the string to convert
>>>     * @param locale
>>>     *            the locale to use for conversion.
>>>     * @return a converted string.
>>>     */
>>>    public char[] toCaseString(final char[] source) {
>>>        return toCaseString(source, Locale.getDefault());
>>>    }
>>> 
>>>    /**
>>>     * Converts from the given {@code source} char[] to the case
>>> specified by this enum using the given {@code locale}.
>>>     *
>>>     * @param source
>>>     *            the char[] to convert
>>>     * @param locale
>>>     *            the locale to use for conversion.
>>>     * @return a converted char[].
>>>     */
>>>    public abstract char[] toCaseString(char[] source, Locale locale);
>>> 
>>>    /**
>>>     * Converts from the given {@code source} string to the case
>>> specified by this enum using the default {@code locale}.
>>>     *
>>>     * @param source
>>>     *            the string to convert
>>>     * @param locale
>>>     *            the locale to use for conversion.
>>>     * @return a converted string.
>>>     */
>>>    public String toCaseString(final String source) {
>>>        return toCaseString(source, Locale.getDefault());
>>>    }
>>> 
>>>    /**
>>>     * Converts from the given {@code source} string to the case
>>> specified by this enum using the given {@code locale}.
>>>     *
>>>     * @param source
>>>     *            the string to convert
>>>     * @param locale
>>>     *            the locale to use for conversion.
>>>     * @return a converted string.
>>>     */
>>>    public abstract String toCaseString(String source, Locale locale);
>>> 
>>> }
>>> 
>>> Gary
>>> 
>>> 
>>>> Matt
>>>> 
>>>> 
>>>>> This is much clearer than using a boolean for the letter case.
>>>> 
>>>> YMMV
>>>> 
>>>>> Gary
>>>>> 
>>>>> 
>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> I posted the code at the start of this thread...
>>>>>>> 
>>>>>>> Gary
>>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>> How does it compare with code that does not have the enum?
>>>>>>>> 
>>>>>>>>> I use it in the following contexts:
>>>>>>>>> - To pass to a hex dump method to configure where the alpha chars
>>>>>> should
>>>>>>>> be
>>>>>>>>> in lower case or upper case.
>>>>>>>>> - To configure a parameterized JUnit test class to configure the
>>>> case
>>>>>> of
>>>>>>>>> HTTP headers and values.
>>>>>>>>> - To normalize input
>>>>>>>>> 
>>>>>>>>> Gary
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Thu, Feb 22, 2018 at 3:14 PM, Otto Fowler <
>>>> ottobackwa...@gmail.com
>>>>>>> 
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> What problem does it solve?
>>>>>>>>>> 
>>>>>>>>>> On February 22, 2018 at 17:02:34, Gary Gregory (
>>>>>> garydgreg...@gmail.com)
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> Does anyone think this is useful and general enough to add to
>>>> Commons
>>>>>>>>>> Text:
>>>>>>>>>> 
>>>>>>>>>> /**
>>>>>>>>>> * Enumerates letter cases and converts strings.
>>>>>>>>>> *
>>>>>>>>>> * @author <a href="mailto:ggreg...@rocketsoftware.com";>Gary
>>>>>> Gregory</a>
>>>>>>>>>> */
>>>>>>>>>> public enum LetterCase {
>>>>>>>>>> LOWER {
>>>>>>>>>> @Override
>>>>>>>>>> public String toCaseString(final String source, final Locale
>>>>>>>>>> locale) {
>>>>>>>>>> return source.toLowerCase(locale);
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> },
>>>>>>>>>> UPPER {
>>>>>>>>>> @Override
>>>>>>>>>> public String toCaseString(final String source, final Locale
>>>>>>>>>> locale) {
>>>>>>>>>> return source.toUpperCase(locale);
>>>>>>>>>> }
>>>>>>>>>> };
>>>>>>>>>> 
>>>>>>>>>> /**
>>>>>>>>>> * Converts from the given {@code source} string to the case
>>>> specified
>>>>>>>>>> by this enum using the given {@code locale}.
>>>>>>>>>> *
>>>>>>>>>> * @param source
>>>>>>>>>> * the string to convert
>>>>>>>>>> * @param locale
>>>>>>>>>> * the locale to use for conversion.
>>>>>>>>>> * @return a converted string.
>>>>>>>>>> */
>>>>>>>>>> public abstract String toCaseString(String source, Locale
>>>> locale);
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> ?
>>>>>>>>>> 
>>>>>>>>>> Thank you,
>>>>>>>>>> Gary
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>>> ------------------------------------------------------------
>>>> ---------
>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>>> 
>>>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>> 
>>> 
>>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to